使用final方法的目的有二。第一,为方法上锁,禁止派生类进行修改。这是处于设计考虑。当你希望某个方法的功能,能在继承过程中被保留下来,并且不被覆写,就可以使用这个方法。
第二个原因就是效率。如果方法是final的,那么编译器就会把调用转换成内联的。当编译器看到要调用final方法的时候,它就会根据判断舍弃普通的,插入方法调用代码编译机制(将参数压入栈,然后跳去执行要调用的方法的代码,在调回来清空栈,再处理返回值,相反它会用方法本身的拷贝来代替方法的调用。当然如果方法很大,那么程序就会膨胀的很快,于是内联也不会带来什么性能的改善,因为这种改善相比程序处理所耗用的时间是微不足道的。
Java的设计者们暗示过,Java的编译器有这个功能,可以智能地判断是不是应该将final方法做成内联的。不过,最好还是把效率问题留给编译器和JVM去处理,而只把final用于要明确地禁止覆写的场合。