如果不覆盖方法,是否应将方法声明为final?

时间:2017-02-24 13:56:21

标签: java oop object methods final

我读到声明一种方法,因为最终会导致性能增强。那么,声明不希望被覆盖为最终的方法是否有意义呢?我的问题是关于性能的改进以及这种用法的任何相关缺点。

2 个答案:

答案 0 :(得分:2)

  

我读到声明一种方法最终会导致性能提升。

对于最近的HotSpot JIT编译器来说,这是不正确的。我的理解是JIT编译器查看所有当前加载的类,以确定它编译的每个方法是否有任何重写。如果没有找到,则JIT编译器将该方法视为最终 1

因此,将方法final声明为优化是没有意义的。

(这可能不适用于所有Java平台;例如,带有原始JIT编译器的非HotSpot平台。)

在方法上更好地使用final是指您希望/需要通过子类化禁止某些类的扩展。是否/何时这样做是一个意见问题。我当然不会这样做"当然"。

1 - 如果动态加载引入了一个重载以前未被覆盖的方法的新子类,HotSpot JIT编译器甚至会重新编译以前编译的类。

答案 1 :(得分:0)

  

因此,声明不期望的方法是否有意义   被推翻为最终?

我不相信。 final关键字表示此方法无法被覆盖(例如出于安全原因),而不是原始开发人员不希望您想要覆盖它。这将是非常冒昧的,肯定会降低API的可扩展性。

正如其他答案所述,我不希望它对表现产生任何影响,如果确实如此,你就不会注意到了!