1. final修饰类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
2. final修饰方法
如果一个类不允许其子类覆盖某个方法(即不允许被子类重写),则可以把这个方法声明为final方法。
使用final方法的原因有二:
把方法锁定,防止任何继承类修改它的意义和实现。
高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
3. final修饰变量(常量)
如果是引用类型,地址不可以改变,其引用的属性值可以改变。如果是基本类型,其值不可改变
另外,通过final修饰,但却没有进行初始化,必须在构造方法中进行初始化,并且只能出现一个构造方法。这叫 空白final
但是,final空白在final关键字final的使用上提供了更大的灵活性,
为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
补充:final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
String为什么不可变?
- 我们通过源码可以看到存储String数据的char数组被final修饰,这也意味着一个String对象里的char数组不可能再指向一个新的数组!
- 并且String内部没有修改char数组的方法。
- String类用final修饰,不可以被继承从而不能通过子类修改。