可以将实例域定义为 final。 构建对象时必须初始化这样的域。也就是说, 必须确保在每
一个构造器执行之后, 这个域的值被设置, 并且在后面的操作中, 不能够再对它进行修改。
例如, 可以将 Employee 类中的 name 域声明为 final, 因为在对象构建之后, 这个值不会再
被修改, 即没有 setName 方法。
class Employee
{
private final String name;
}
final 修饰符大都应用于基本 (primitive) 类型域,或不可变(immutable) 类的域(如果类
中的每个方法都不会改变其对象, 这种类就是不可变的类。 例如,String类就是一个不可变
的类 )。
对于可变的类, 使用 final 修饰符可能会对读者造成混乱。例如,
private final StringBuiIcier evaluations;
在 Employee 构造器中会初始化为
evaluations = new StringBuilder();
final 关键字只是表示存储在 evaluations 变量中的对象引用不会再指示其他 StringBuilder
对象。 不过这个对象可以更改:
public void giveGoldStarO
{
evaluations.append(LocalDate.now() + ": Gold star!\n");
}