Java final修饰符
- 论坛
- Java final修饰符
6 浏览
Java final修饰符
我被告知,我对final
的影响有误解。那么final
关键字有什么影响呢?
以下是我所了解的简要概述:
Java final修饰符(也称为聚合关系)
基本变量:只能设置一次(内存和性能增益)
对象变量:可以修改,final适用于对象引用
字段:只能设置一次
方法:不能被覆盖、隐藏
类:不能被扩展
垃圾回收:将强制Java分代垃圾回收进行双重扫描。
可以和不可以
- 可以使克隆失败(这既有好处也有坏处)
- 可以使基本类型不可变,也称为const
- 可以使空白不可变 - 在创建时初始化,也称为readonly
- 可以使对象浅不可变
- 可以使作用域/可见性不可变
- 可以减小方法调用开销(因为不需要虚拟表)
- 可以使方法参数作为final使用(即使它们不是)
- 可以使对象线程安全(如果对象被定义为final,则不会使方法参数为final)
- 可以进行模拟测试(尽管你对此无能为力-你可以说bugs是有意的)
- 无法使友元(对其他友元可变,对其他人不可变)
- 无法使可变对象在后来变为不可变(但可以使用工厂模式像fix那样实现)
- 无法使数组元素不可变,也称为深不可变
- 无法创建对象的新实例(这既有好处也有坏处)
- 无法使序列化工作
final
没有替代品,但可以使用包装器+私有和枚举。