final关键字
三种情况:final数据、方法和类
一、final数据
- 使用场景举例:
- 一个永不改变的编译时常量。(编译时常量必须是基本数据类型,必须在这个常量定义时赋值)
- 一个在运行时被初始化的值,而不希望它被改变。
对于基本类型,final使数值恒定不变;对于对象引用,final使引用恒定不变,然而对象其自身却是可以被修改的。
定义为static final:static强调只有一份,final则说明是一个常量。
定义为final的常量,并不表示在编译时就可以知道它的值,它也可能在运行时被初始化。
2.空白final
3.final参数
指定为final的参数,表明在方法中无法更改。
二、final方法
1.使用final方法的原因有两个:
-
- 把方法锁定,以防止任何继承类修改它的含义。
- 效率原因,编译器将final方法转为内嵌调用,以提高效率,但是当方法很大时无效。
2.final和private关键字
类中所有private方法都隐式地指定为是final的。由于无法取用private方法,所以也就无法去覆盖它。
@Override注解可以解决该问题。
三、final类
将某个类的整体定义为final时,表明该类不能被继承。
也就是说,该类的设计不能做任何改动,或者出于安全考虑,定义者不希望该类有子类。
final类会把它所有的方法都隐式指定为是final的,因为无法覆盖它的方法。