Thinking in Java [Java編程機制] 學習筆記 -- final 關鍵字

final 關鍵字意義上是不可變更的,創造final關鍵字,原因有兩個1.爲了設計design 2.爲了效率 efficiency(書上很少提到這一部分,而且JRE 5以後編譯器對沒有final的效率做了很大提升)。final關鍵字可以加在data, arguments, method, class之前,下面針對每種情況進行解釋。

final data

final data意味着constant。這種constant有三種創建和賦值的情況
1. 可以是個編譯時常量,在聲明的時候直接賦予確定不變的值,例如
private final int valueOne = 1;
private static final int VALUE_TWO = 2;

2. 可是一個運行時的常量,在聲明的時候賦予一個不確定的值,例如
private final int valueThree = random.nextInt(10);
private static final Value VALUE_FOUR = new Value(7);

3. blank finals, 變量可以被聲明爲final,確不在聲明時進行初始化賦值,但是編譯器保證所有的blank final必須要在使用前進行初始化,例如
public class BlankFinal {
    private final int valueFive; //black final
    public BlankFinal() {
        valueFive = 5; //initialized
    }
}

final arguments

分爲兩種情況,
1. 如果參數是primitive type,這個參數在函數內部是無法改變其值的
2. 如果參數是某個對象的引用,這個參數在函數內部是無法改變其引用的對象,但是可以改變該對象的內容

final methods

其作用是在該方法method上加一個鎖,使其在被繼承時不能夠被修改。
以前通過加final關鍵字的方法可以實現效率的優化,但在JRE 5/6之後,你應該把優化工作全部丟給編譯器,鼓勵你寫final method只是因爲要組織繼承時重載該方法

final classes

在類聲明前面加上final關鍵字,表示你不希望這個類被任何人繼承。就是說這個類可能因爲不需要更多的修改,或者處於安全原因,不希望被繼承。
注意,final class裏面所有的方法,都是final的,雖然沒有顯式的標明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章