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)鍵字作為修飾,代表這個方法你認為不需要再重寫和修改,而是想要確保在繼承中方法的行為保持不變。
在過去,建議使用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é)對象的方法。