final是java的一個關(guān)鍵字蕴潦,他可以用于修飾類,方法俘闯,變量潭苞。此關(guān)鍵字的作用在于表明它所修飾的內(nèi)容是不可改變的。
1 修飾變量
final顧名思義是最終的意思真朗,他修飾變量意味著這個變量的值不能再更改此疹。一個即是static又是final的常量會占據(jù)一段不能改變的內(nèi)存空間。對于這樣的常量遮婶,我們的命名規(guī)范是約定俗成的大寫字母加下劃線蝗碎,如下:
private static final int TEST_FINAL = 1;
在修飾引用變量的時候,這個值是指的其引用不變旗扑,但引用的對象的內(nèi)容是可變的蹦骑。而在修飾基本變量如int時,則意味著這個基本類型的值不能改變臀防。值得注意的是,final在修飾String類的對象時眠菇,其值和修飾基本變量類型是一樣不能改變的。答案可以在這篇博客中找到:[Java] String類深度解析袱衷。這里不再展開捎废。
2 修飾方法
final修飾的一個方法代表這個方法可以被繼承,但是不可以被子類重寫致燥。一般對一個方法加上final關(guān)鍵字作為修飾登疗,代表這個方法你認(rèn)為不需要再重寫和修改,而是想要確保在繼承中方法的行為保持不變。
在過去辐益,建議使用final 方法的另一個原因在于效率断傲,final方法是在程序編譯的時候就靜態(tài)綁定了,但是在如今的jvm中這個速度已經(jīng)可以忽略不計了智政。并且艳悔,也不再建議出于效率目的使用final。
此外女仰,一個類中所有的private方法都是隱式的被指定為final 的。因此對private方法添加final關(guān)鍵字沒有任何意義抡锈。private方法不能被取用疾忍,因此也無法覆蓋。
3 修飾類
final類不能被繼承床三,其修飾的類功能通常是完整的一罩。
與finally區(qū)別讥巡?finally 通常用在異常處理中熙涤。異常處理可以參考這篇文章:java異常機制詳解。
與finalize區(qū)別穷躁?finalize是在Object類中定義的方法四瘫,是在垃圾回收時虛擬機調(diào)用來終結(jié)對象的方法汉嗽。