声明私有方法是否有优势?#34; final"在Java?

时间:2014-12-07 22:22:12

标签: java

将私有方法声明为" final"是否有优势?在Java?

如果我的理解是正确的,那么" final"修饰符确保我不能覆盖子类中的方法,因此可能使此方法在运行时更有效。一些文献说,如果它是最终的,可以内联,例如可以使方法调用更快。此外,如果声明为final,则Java运行库不必在继承层次结构中查找其他方法。

然而,私人功能不能被覆盖,所以它们是隐含的"最终"还有?以下两个声明之间是否存在差异:

private void myFun()

private final void myFun();

3 个答案:

答案 0 :(得分:5)

子类不能通过设计覆盖private方法。此外,final关键字告诉编译器,无论访问级别如何,子类都不能覆盖方法。

由于private已经暗示子类可能不会覆盖方法,因此将私有方法声明为final是多余的。发表声明不会引起问题,但也不会有任何成就,因为私有自动被认为是最终的。

所有编制者都会将private方法视为final。编译器不允许覆盖任何private方法。同样,所有编译器都会阻止子类覆盖final方法。

<强>更新

在你的问题中,你说的是

  

“final”修饰符确保我无法覆盖a中的方法   子类和so使得这个方法在运行时更有效

这是一个值得怀疑的陈述。如果您声明private方法final,则优化将取决于您使用的编译器及其设置。这意味着 NO 。不,如果您确实声明了方法privatefinal,或仅final,那么它的运行速度会更快。

答案 1 :(得分:4)

不,私有方法不需要final关键字。 根据定义,私人私人决赛之间没有区别 有关更多信息,请参阅Java语言规范中的'final methods'

答案 2 :(得分:1)

这些是Java中final的不同含义和优点:

  • 原始类型变量的final关键字使其无法重新分配。兴趣显而易见。

  • 对象变量的final关键字可防止其引用被更改。

  • 方法上的final关键字可以防止它在子类中被覆盖。在让子类看到它的同时保护超类的关键方法的功能很有用。

  • 类上的final关键字可以防止它被另一个类扩展。大多数情况下这是一个坏主意,但标准库的许多基类都是这样的(例如java.lang.Mathjava.lang.Stringjava.lang.Integer ......)

正如您所看到的,声明privatefinal的某些方法等同于将其声明为private,因为在这两种情况下,子类都无法覆盖它。

但是,变量存在差异。实际上,声明它private只会将其隐藏到其他类,而添加final也会阻止其引用在当前类的代码中被更改(这将强制构造函数初始化它)。 / p>