Java final修饰符

时间:2010-10-25 06:06:42

标签: java final

有人告诉我,我误解了final的影响。 final关键字有什么影响?

以下简要概述了我的想法,我知道:

  

Java final modifier(又名聚合关系)

     

原始变量:只能设置一次。 (记忆和表现   增益)
  对象变量:可以修改,最终适用于对象   参考。
  字段:只能设置一次。
  方法:无法覆盖,隐藏。
  班级:无法延期。
  垃圾收集:将强制Java世代垃圾收集   标记扫描到双扫。

Can's和Cant's

  • 可以使克隆失败(这既好又坏)
  • 可以使不可变的原语aka const
  • 可以使空白不可变 - 在创建时初始化也称为readonly
  • 可以使对象变得浅不可变
  • 可以使范围/可见性不可变
  • 可以使方法调用开销变小(因为它不需要虚拟表)
  • 可以将方法参数用作final(即使你不是)
  • 可以使对象线程安全(如果对象被定义为final,它不会使方法参数最终)
  • 可以进行模拟测试(不是说你可以对它做任何事情 - 你可以说错误是有意的)
  • 不能交朋友(与其他朋友互相交换,休息不变)
  • 不能将以后更改为不可变的变量(但可以像工厂模式一样修复)
  • 不能使数组元素成为不可变的,也就是不可变的
  • 无法创建对象的新实例(这既好又坏)
  • 无法进行序列化工作

final没有其他选择,但有包装+私有和枚举。

2 个答案:

答案 0 :(得分:72)

答案 1 :(得分:2)

最终关键字通常用于保持不变性。对类或方法使用final是为了防止方法之间的联系被破坏。例如,假设类X的某些方法的实现假定方法M将以某种方式运行。将X或M声明为final将阻止派生类重新定义M,从而导致X行为不正确。