關鍵詞final在Java中有多重用途,既可被用于instance變量、static變量
也可用于classes或methods,表示不允許客戶覆寫它們。
當一個方法被聲明成final,在兩個領域中顯得有位重要:
- class設計
- 運行期性能
在程序設計里,有時我們不希望我們的方法被重寫或覆蓋,final關鍵字保證了這一點。
final關鍵字是怎么影響性能的呢?
當我們的方法被聲明成static,final和private, 此方法將成為Inlining(內聯函數)的候選者。此類方法可以在編譯期被靜態(tài)決議(staticallyresolved),而不需要動態(tài)決議(dynamicResolution)。以方法本體(methodbody)替換方法調用(methodcall)會使代碼執(zhí)行速度更快。
將方法聲明為static、final和private會帶來一些缺點:這樣的方法無法通過Subclassing(子類化)進行擴展。這就束縛了derived class通過class函數做事情的機會。inlined方法只有在被多次調用的情況下,才會獲得令人側目的性能提升。這是因為當一個方法被inline后,就不再需要負擔方法調用的額外開銷。因此,方法被調用愈多次,節(jié)省就愈多。
不過inlining也可能使你的代碼體積變大。如果這個方法有許多調用點,.class文件的體積便會膨脹,這是因為原本只需存儲一份的函數碼,由于inline而在所有調用點被復制了一份。
Kyle Wang