之所以要使用final 方法,可能是出于對兩方面理由的考慮。第一個是為方法“上鎖”,防止任何繼承類改
變它的本來含義。設(shè)計程序時,若希望一個方法的行為在繼承期間保持不變,而且不可被覆蓋或改寫,就可
以采取這種做法。
采用final 方法的第二個理由是程序執(zhí)行的效率。將一個方法設(shè)成final 后,編譯器就可以把對那個方法的
所有調(diào)用都置入“嵌入”調(diào)用里。只要編譯器發(fā)現(xiàn)一個final 方法調(diào)用,就會(根據(jù)它自己的判斷)忽略為
執(zhí)行方法調(diào)用機(jī)制而采取的常規(guī)代碼插入方法(將自變量壓入堆棧;跳至方法代碼并執(zhí)行它;跳回來;清除 計算機(jī)愛好者www.boydavid.com
堆棧自變量;最后對返回值進(jìn)行處理)。相反,它會用方法主體內(nèi)實際代碼的一個副本來替換方法調(diào)用。這
樣做可避免方法調(diào)用時的系統(tǒng)開銷。當(dāng)然,若方法體積太大,那么程序也會變得雍腫,可能受到到不到嵌入
代碼所帶來的任何性能提升。因為任何提升都被花在方法內(nèi)部的時間抵消了。Java 編譯器能自動偵測這些情
況,并頗為“明智”地決定是否嵌入一個final 方法。然而,最好還是不要完全相信編譯器能正確地作出所
有判斷。通常,只有在方法的代碼量非常少,或者想明確禁止方法被覆蓋的時候,才應(yīng)考慮將一個方法設(shè)為
final。
類內(nèi)所有private 方法都自動成為final。由于我們不能訪問一個private 方法,所以它絕對不會被其他方
法覆蓋(若強(qiáng)行這樣做,編譯器會給出錯誤提示)?蔀橐粋private 方法添加final 指示符,但卻不能為 電腦技術(shù)www.boydavid.com
那個方法提供任何額外的含義 本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|