类的声明与对象的创建
一、类声明:
[public] [abstract | final] class 类名 [extends 父类名] [implements 接口名称列表]
{
数据成员声明及初始化;
方法声明及方法体;
}
abstract:抽象类
final类:终结类(不能被继承)
二、对象引用声明和对象的创建
类名 对象名;
对象名=new 类名();
数据成员
一、数据成员的声明:
[public | protected | private] [static] [final] [transient] [volatile] 数据类型 变量名[=变量初值]
static:静态成员变量(类变量),适用于所有对象都有相同的属性的情况
final:常量
transient:变量无需序列化,存盘不会存它
volatile:共享变量
二、引用格式:
一般数据引用格式:对象名.变量名
类变量引用格式是:类名.类变量名 或 对象名.类变量名
方法成员
一、方法的声明
[public | protected | private] [static] [final] [abstract] [native] [synchronized]返回类型 方法名(参数列表)[throwsexceptionList]
{
方法体
}
static:静态方法(类方法),静态方法不能被声明为抽象的
final:终结方法
abstract:抽象方法
synchronized:控制多个并发线程对共享数据的访问
throws exceptionList:异常抛出列表
二、引用格式
实例方法引用格式:对象名.方法名(参数列表)
类方法引用格式:类名.方法名(参数列表)或对象名.方法名(参数列表)
三、可变长参数
在参数列表中不确定要输入几个参数时会用到,用...表示,其实质是数组,例如String...s表示String[ ] s。
使用时常与增强for循环一起使用,例如
double max(Circle c,Rectangle...varRec)
{
Rectangle [ ]rec=varRec;
for(Rectangle r:rec)
{
....
}
}
包(一组类的集合,一个包可以包含多个类或多个子包)
一、包的命名:
java中包名使用小写字母表示,建议将机构的Internet域名反序,作为包名的前导
二、编译单元
1.一个java源文件称为一个编译单元。
2.由三部分组成:所属包的声明(省略的话属于默认包)、Import包(引入包)的声明,用于导入外部的类、类和接口的声明
3.一个编译单元中只能有一个public类,且该类名与文件名相同,编译单元其他类是public类的辅助类,经过编译每个类都会产生一个class文件
三、包的声明
package 包名;
四、引入包
1.java编译器自动为所有程序引入java.lang这个包
2.import语句格式:
import 包名1(.包名2。。。).(类名 | *)
包名1(.包名2。。。)表示包的层次,指明要引入的类名,若要引入一个包的所有类,可以使用*
3.静态引入(引入后静态成员可以直接使用,不用再写类名.静态成员名格式)
单一引入(引入某类某一指定的静态成员):import static java.lang.Math.PI;
全体引入(引入某类中全部的静态成员):import static java.lang.Math.*;
类的访问权限控制
一、类的访问权限
同一包中的类:无修饰类和public类均可以访问
不同包中的类:无修饰类不能访问,public类可以访问
二、类的成员访问权限
public:在对该成员所属的类有访问权限的情况下,可以被任何方法访问
protected:只可被同一包内和同一类的子类(不管子类是否在同一包中)的方法访问
无修饰:仅允许同一包内的访问,又称包访问
private:只可被同一类的方法访问
(访问范围由上到下变小)
三、如何访问private成员(公有接口)
1.get方法(取得private成员的值):一般以get开头后面是private变量名
例如: public int getRadius()
{
return radius;
}
2.set方法(设置private成员的值):一般以set开头后面是private变量名
例如: public void setRadius(int r)
{
radius=r;
}
四、当方法内局部变量(形参)与实例变量(类成员名)相同时,方法体内访问实例变量时需要this关键字
例如: public void setRadius(int radius)
{
this.radius=radius;
}
对象初始化
一、构造方法规则:
1.方法名与类名相同
2.不定义返回类型
3.通常被声明为public
4.若没有显式声明构造方法,则编译器隐含生成默认的构造方法
5.不会在程序中显式调用,而是在生成一个对象时,自动调用该类的构造方法为新对象初始化
二、默认构造方法:
1.没有参数(内部类除外),方法体为空。
2.若类声明中没有给实例变量赋初值,则对象的属性值为0或空
三、自定义构造方法:
可以被重载(一个类中有两个及两个以上同名的方法,参数表不同)
四、使用this的重载构造方法,用this代替重载的构造方法名
public Bank()
{
this(" ",99999,0.0f)
}
public Bank(String Name,int Number,float balance)
{
...
}
五、final变量的初始化(一经初始化不能再被改变)
1.final实例变量可以在类中定义时给出初始值或在每个构造方法结束前完成初始化
2.final类变量必须在声明的同时进行初始化
内存回收(自动):
一、无用对象
1.离开了作用域的对象
2.无引用指向的对象
二、垃圾收集器
1.java运行时系统通过垃圾收集器周期性释放无用对象所使用的内存(与C++/C不同)
2.垃圾收集器自动扫描对象的动态内存区,对不再使用的对象做上标记以进行垃圾回收
三、finalize()方法
1.java运行时系统会在对对象进行自动垃圾回收之前,自动调用对象的finalize()方法
2.用于释放资源
3.在类java.lang.Object中声明,它是java每个类直接或间接的父类,因此java中每个类都有该方法
4.finalize()方法可能在任何时机以任何次序执行
枚举类(对象的值有可取范围):
一、声明枚举类
[public] enum 枚举类名
[implement 接口名称列表]
{
枚举值(枚举对象);
变量成员声明及初始化;
方法声明和方法体;
}
二、枚举类的特点
1.所有枚举类型都隐含继承自java.lang.Enum,因此枚举类型不能再继承其它任何类
2.枚举类的构造方法必须是包内私有或私有的,不能显示调用枚举类的构造方法
三、枚举类的默认方法
1.静态的values()方法:获得枚举类的枚举值(枚举对象)的数组
2.toString()方法:返回枚举值的字符串描述
3.valueOf()方法:将以字符串形式表示的枚举值转化为枚举类的对象
4.Ordinal()方法:获得对象在枚举类中的位置索引
toString()方法
一、作用
可以将对象转换为String类型,下面两行代码等价:
System.out.println( this ); 自动调用toString()
System.out.println( this.toString() ); 手动调用toString()
二、覆盖toString()方法:
1.必须声明为public
2.返回类型为String
3.方法名称必须为toString且没有参数
4.方法体中不要使用输出方法,即System.out.println()
三、DecimalFormat类
该类在java.text包中,在toString()方法中使用DecimalFormat类的实例方法format对数据进行格式化
例:public String toString()
{
return(“balance”+newjava.text.DecimalFormat("$0.00").format(balance));
}
输出的钱数将全部为保留小数点后两位