淺析final關鍵字 final單詞字面意思是“最終的,不可更改的”。所以在java中final關鍵字表示終態,即最終的狀態,“這個東西不能被改變”。 final關鍵字可以用來修飾類、方法、數據(包括成員變數、局部變數與方法參數)。 (1)final類 final關鍵字修飾的類是不能被繼承的。在這裡 ...
淺析final關鍵字
final單詞字面意思是“最終的,不可更改的”。所以在java中final關鍵字表示終態,即最終的狀態,“這個東西不能被改變”。
final關鍵字可以用來修飾類、方法、數據(包括成員變數、局部變數與方法參數)。
(1)final類
final關鍵字修飾的類是不能被繼承的。在這裡插入一些個人想法,當一個類被修飾為final時,代表它無法被繼承,即不能被擴展,所以從設計的角度來考慮,自己寫的類一般不要修飾為final;而對於輔助性的類為了不讓外部破壞內部數據,可以修飾為final,這些只是個人想法,如果有錯,望指正!
(2)final方法
final關鍵字修飾的方法不能被重寫。可能會使用final方法的兩個原因:一是給方法”上鎖”,防止繼承類修改它;二是程式執行效率考慮,編譯器在遇到調用final方法時候會轉入內嵌機制,大大提高執行效率。
(3)final成員變數
當final關鍵字修飾成員變數時,表示該成員變數只能進行一次賦值操作,並且在生存期內不可以改變它的值。final成員變數必須在聲明時進行初始化或者在構造器中進行初始化,否則編譯器會報錯。
(4)final局部變數
final修飾局部變數時只能初始化(賦值)一次,並且在生存期內不可以改變它的值。與成員變數不同,final局部變數在聲明時可以不初始化,只需要保證在使用之前初始化賦值即可。
(5)final參數
當final關鍵字修飾參數時比較複雜,final修飾方法參數時,是在調用方法傳遞參數時候初始化的。參數被聲明為final,若是基本參數,那它就是一個常量,在調用方法傳遞參數後不能被修改;若是一個引用變數,那麼它在調用方法傳遞參數後就不能被修改指向另一個對象,但可以修改該引用所指對象的內容。
註意:
(1)如果一個類被修飾為final,結果只是禁止繼承,沒有更多的限制。所以其數據成員可以是final的,也可以不是,取決於我們的具體選擇。
(2)final類中的所有方法被預設為final方法,如果一個類不能被繼承,則其內部的方法不會被重寫,所以編譯器預設final類中的方法是final方法(final類中的方法你添加final修飾符不會增加任何效果。
想一想:
在創建一個類時,可以同時用final關鍵字與abstract關鍵字修飾嗎?