6.8 P153-158
一、final 字段、变量、形参;在使用前必须初始化,初始化之后不能被修改
1. 对于基本数据类型,值不能被修改;对于引用类型,不能指向其他的对象,但对象本身可以被修改,数组引用也是如此
2. 有的在编译期就确定值,如 final int num1 = 2;有的在运行期才确定值,如 final int num2 = (int)(Math.random() * 20)
3. 对于定义时未初始化的final字段,在构造方法中必须对其进行初始化;接口内定义的字段自动式 static final 的,且必须在定义时初始化
4. 使用 final 修饰的方法的形参,在方法内部不能被修改
二、 final 方法
1. 防止方法在子类中被覆盖、重写(不能在子类中定义具有相同方法名、形参列表的方法)
2. 编译器对于代码量较小的 final 方法,在调用方法的地方,会进行方法体代码嵌入,而非方法调用的方式,减少方法调用的开销
3. private 修饰的方法,自动添加 final 修饰,但在子类中可定义同名、同形参列表的方法;此举应该是为了获得方法体代码嵌入的方式
4. Java 中的方法,除 final 方法外,其他的方法都采用动态绑定方式
三、final 类
1. final 类将不能被继承
2. final 类的字段与普通类一样,可以设成 final,也可不设
3. 由于不存在被覆盖、重写的可能,final 类的所有方法,将默认设为 final,从而使用方法体代码嵌入的方式,获得效率的提升