关键词final在Java中有多重用途,既可被用于instance变量、static变量
也可用于classes或methods,表示不允许客户覆写它们。
当一个方法被声明成final,在两个领域中显得有位重要:
- class设计
- 运行期性能
在程序设计里,有时我们不希望我们的方法被重写或覆盖,final关键字保证了这一点。
final关键字是怎么影响性能的呢?
当我们的方法被声明成static,final和private, 此方法将成为Inlining(内联函数)的候选者。此类方法可以在编译期被静态决议(staticallyresolved),而不需要动态决议(dynamicResolution)。以方法本体(methodbody)替换方法调用(methodcall)会使代码执行速度更快。
将方法声明为static、final和private会带来一些缺点:这样的方法无法通过Subclassing(子类化)进行扩展。这就束缚了derived class通过class函数做事情的机会。inlined方法只有在被多次调用的情况下,才会获得令人侧目的性能提升。这是因为当一个方法被inline后,就不再需要负担方法调用的额外开销。因此,方法被调用愈多次,节省就愈多。
不过inlining也可能使你的代码体积变大。如果这个方法有许多调用点,.class文件的体积便会膨胀,这是因为原本只需存储一份的函数码,由于inline而在所有调用点被复制了一份。
Kyle Wang