下文来自 On Java 8 - Chapter 8 Reuse
前言
final表示”这是不能改变的“- 可能使用
final的三个地方:数据、方法、类
final数据
- 对于基本类型,
final使数据恒定不变 - 对于对象引用,
final使引用恒定不变:一旦引用被初始化执行了某个对象,它就不能改为指向其他对象;但是,对象本身是可以修改的
空白final
- 空白
final:没有初始化值的final属性 - 编译器确保空白
final在使用前必须被初始化,既能使一个类的每个对象的final属性值不同,也能保持它的不变性
1 | class Poppet { |
final参数
- 在参数列表中,将参数声明为
final意味着在方法中不能改变参数指向的对象或基本变量 final基本类型参数,只能读取而不能修改参数,主要用于传递数据给匿名内部类
final方法
- 使用
final方法的原因- 给方法上锁,防止子类通过覆写改变方法的行为。这是出于继承的考虑,确保方法的行为不会因继承而改变
- (现在已经不推荐)效率考虑,
- 应该让编译器和 JVM 处理性能问题,只有在为了明确禁止覆写方法时才使用
final
final类
final修饰一个类,说明它不能被继承final类的属性可以根据个人选择是或不是final- 由于
final禁止继承,类中所有方法都被隐式指定为final,所以无法覆写它们 - 原因:是因为类的设计永远不需要改动,或者是处于安全考虑不希望它有子类