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