预定义类部分
更改器和访问器
更改器方法:调用方法后,会改变对象的状态。
访问器方法:只访问对象而不修改对象,通过生成新对象的方式应用改动。
自定义类部分
封装
注意是否返回了引用可变对象,即访问器方法返回了一个有更改器方法的对象;返回可变对象的引用时,应该先进行 clone。
Date 类有更改器方法 setTime,破坏了封装性:
1 | private Date hireDay; |
final
将实例域定义为 final,则构建对象时必须初始化这样的域(在构造器之后),并且之后不能再修改。大多应用于不可变类的域,对于可变的类只表示变量中的对象引用不会再指向其他对象,但当前这个对象可以修改。
- 不可变类:类中的的每个方法都不会改变其对象,如 String 类。
System.out 被声明为 final,但 System 类有 setOut 方法:本地方法不是用 Java 语言实现,可以绕过 Java 的存取控制机制。
静态部份
静态方法
不能对对象实施操作,不使用其对象,即没有 this 参数的方法。使用:
- 一个方法不需要访问对象状态,所需参数都通过显式参数提供。
- 一个方法只需要访问类的静态域。
参数传递部分
Java 总是采用按值调用。即方法得到的是参数值的一个拷贝。注意,Java 对对象采用的也是值调用,对象引用是按值传递的。
- 一个方法不能修改一个基本数据类型的参数(数字型或布尔型)。
- 一个方法可以改变一个对象参数的状态。
- 一个方法不能让对象参数引用一个新的对象,因为方法结束后就被丢弃。
对象构造部分
重载
方法的签名包含方法名和参数类型, 不包括返回类型和参数名。
无参数构造器
当类没有提供任何构造器时,系统会提供一个无参数构造器,数值型设置为 0,布尔型设置为 false,对象变量设置为 null。
显式域初始化
在类定义中直接将值赋给任何域,赋值操作会在 super(); 与构造器之间执行。可以调用方法进行初始化。
构造器执行步骤
未包含继承部分。
- 所有数据域初始化为默认值。
- 按照在类声明中的出现次序,依次执行所有域初始化语句和初始化块。
- 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。
- 执行此构造器。