P140
final 可能用到的三种情况:数据,方法和类
final 可以先定义了后,然后再构造函数中初始化
final 数据
- 使用原因
1.一个永不改变的编译时常量
2.一个在运行时被初始化的值,而你不希望它被改变
一个既是 static 又是 final 的域只占据一段不能改变的存储空间
- 易混点:
final 基本数据类型
final 对象
final 基本数据类型,指的是数值不变,如 final int d= 1;
,那么 d 这个变量变量就不能再给它赋其他值,错误:d=2;
final 对象引用,指的是引用的对象不变,如 final Value v = new Value(1);
v1.i++
,可以对 Value 对象的成员变量进行修改,但重新为v赋值一个新的对象是错误的 v = new Value(2)
final 方法
使用原因
1.要把方法锁定,以防任何继承类修改它的含义,这样在子类继承父类时,该方法的行为将保持不变,并且不会被覆盖
2.效率(早期建议的做法)final 和 private 关键字
1.类中所有的 private 都隐式地指定为是 final 的
即平时定义的private type function(){}
实际上是private final type function(){}
final 参数
将参数列表的参数声明为 final ,意味着你无法在方法中更改参数引用所指向的对象。这点跟 final 对象引用相似。这一特性主要用来向匿名内部类传递数据
final 类
- 原因
该类不能被继承,即该类没有子类,这样类中的所有方法都默认隐式指定为 final