final关键字
final类
声明一个final类可确保其他类无法对这个类进行扩展
final方法
同final类一样, final方法不可以在子类中被重写, 将方法变成final的三大好处:
- 可以显示的防止子类中的方法重写
- final方法会告诉编译器对于final方法的调用不需要动态绑定
- 能够带来更好的效率。将方法标记为final可以让编译器将所有的final方法调用转为内联调用
final变量
使用final关键字声明的变量被认为是常量。任何在程序中试图改变常量的操作,都会导致编译时的错误
final变量不需要在声明时就被初始化,程序也可以在声明的其他地方初始化final变量。不过, 这样的初始化必须只执行一次。声明时未初始化的final变量叫做空缺变量。
例如:
public class Student{
public final int age;
public Student(){
age = initAge();
}
public int initAge(){
return 30; //初始化age
}
}
注意: 空缺final变量必须在构造函数中初始化, 因为空缺final变量只在对象生命周期中被调用一次。如果final变量在构造函数中初始化, 那么就必须在所有的重载构造函数中初始化
final类变量
final类变量不能指向除初始化时设置的对象之外的任何对象
final关键字要点:
- 不能子类化(扩展)final类
- 不能重写final方法
- 类中的final变量(字段)视为常量
- 空缺final变量(字段)是一种声明为final变量但未初始化的变量
- 空缺final变量必须在构造函数中初始化, 如果final变量在构造函数中初始化, 那么就必须在所有的重载构造函数中初始化
- 空缺final变量(字段)仅可被设置一次
- 空缺final变量(字段)必须在使用之前进行设置