0%

Java 补丁-对象和类

预定义类部分

更改器和访问器
更改器方法:调用方法后,会改变对象的状态。
访问器方法:只访问对象而不修改对象,通过生成新对象的方式应用改动。

自定义类部分

封装
注意是否返回了引用可变对象,即访问器方法返回了一个有更改器方法的对象;返回可变对象的引用时,应该先进行 clone。
Date 类有更改器方法 setTime,破坏了封装性:

1
2
3
4
private Date hireDay;
public Date getHireDay(){
return hireDay;
}

final
将实例域定义为 final,则构建对象时必须初始化这样的域(在构造器之后),并且之后不能再修改。大多应用于不可变类的域,对于可变的类只表示变量中的对象引用不会再指向其他对象,但当前这个对象可以修改。

  • 不可变类:类中的的每个方法都不会改变其对象,如 String 类。
    System.out 被声明为 final,但 System 类有 setOut 方法:本地方法不是用 Java 语言实现,可以绕过 Java 的存取控制机制。

静态部份

静态方法
不能对对象实施操作,不使用其对象,即没有 this 参数的方法。使用:

  • 一个方法不需要访问对象状态,所需参数都通过显式参数提供。
  • 一个方法只需要访问类的静态域。

参数传递部分

Java 总是采用按值调用。即方法得到的是参数值的一个拷贝。注意,Java 对对象采用的也是值调用,对象引用是按值传递的。

  • 一个方法不能修改一个基本数据类型的参数(数字型或布尔型)。
  • 一个方法可以改变一个对象参数的状态。
  • 一个方法不能让对象参数引用一个新的对象,因为方法结束后就被丢弃。

对象构造部分

重载
方法的签名包含方法名和参数类型, 不包括返回类型和参数名。

无参数构造器
当类没有提供任何构造器时,系统会提供一个无参数构造器,数值型设置为 0,布尔型设置为 false,对象变量设置为 null。

显式域初始化
在类定义中直接将值赋给任何域,赋值操作会在 super(); 与构造器之间执行。可以调用方法进行初始化。

构造器执行步骤
未包含继承部分。

  1. 所有数据域初始化为默认值。
  2. 按照在类声明中的出现次序,依次执行所有域初始化语句和初始化块。
  3. 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。
  4. 执行此构造器。