企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### [final 方法](https://lingcoder.gitee.io/onjava8/#/book/08-Reuse?id=final-%e6%96%b9%e6%b3%95) 使用**final**方法的原因有两个。第一个原因是给方法上锁,防止子类通过覆写改变方法的行为。这是出于继承的考虑,确保方法的行为不会因继承而改变。 过去建议使用**final**方法的第二个原因是效率。在早期的 Java 实现中,如果将一个方法指明为**final**,就是同意编译器把对该方法的调用转化为内嵌调用。当编译器遇到**final**方法的调用时,就会很小心地跳过普通的插入代码以执行方法的调用机制(将参数压栈,跳至方法代码处执行,然后跳回并清理栈中的参数,最终处理返回值),而用方法体内实际代码的副本替代方法调用。这消除了方法调用的开销。但是如果一个方法很大代码膨胀,你也许就看不到内嵌带来的性能提升,因为内嵌调用带来的性能提高被花费在方法里的时间抵消了。 在最近的 Java 版本中,虚拟机可以探测到这些情况(尤其是*hotspot*技术),并优化去掉这些效率反而降低的内嵌调用方法。有很长一段时间,使用**final**来提高效率都被阻止。你应该让编译器和 JVM 处理性能问题,只有在为了明确禁止覆写方法时才使用**final**。