Java基礎 關於final修飾符的一點思考

2021-08-14 14:31:04 字數 629 閱讀 7897

在看hashmap的源**的時候,發現其中的每個鍵值對的型別為乙個node,其中包含了乙個成員變數hash,被final修飾符修飾,但是並沒有被初始化。這就有點奇怪了。

是因為不是所有的被final修飾的值都要在宣告時馬上賦值嗎?之前看到的關於final修飾變數時基本上時這麼說的呀。寫了乙個測試類,如下

class

demo1

}

當注釋掉構造器中的賦值語句之後,編譯器報錯。這或許是可以被理解的。當構造器執行完了之後,乙個物件才會被建立完成,其中的成員變數才有可能被訪問到,所以它在被訪問到之前,還是完成了初始化,得到了值。

當然是的。在this.hi = hi;後面,再新增一條語句如下,

class

demo1

}

此時編譯器是報錯的,因為final變數的值不能被改變。

測試的結果與基本資料型別相同。

class

demo1

}class

demo2

{}

依舊無編譯錯誤。

JAVA中final修飾引數

1 final 修飾在變數上,說明這個變數的值不能修改 final 修飾在方法上,說明這個方法在繼承後不能覆蓋.final 修飾在類上,說明這個類為終態,不能被繼承了.2 final型別修飾的引數分為兩種型別 基本型別 與 引用型別 參考 1 在呼叫的引數內部,無論是基本型別還是引用型別,其值不可改...

(基礎)java中的final修飾符

final修飾符 final修飾常量 開發中使用final較多的地方 用來修飾常量 當程式中使用到的資料是固定不變的,請使用final對其進行修飾!常量名使用大寫,多個單詞間使用下劃線分割 全域性常量 public static final double pi 3.1415926 區域性常量 fin...

JAVA基礎知識(二) final修飾符

final具有 不可改變的 含義,它可以修飾非抽象類 非抽象成員方法和變數。1 final類 在以下情況下,可以考慮把類定義成final型別,使得這個類不能被繼承 2 final方法 在某些情況下,出於安全的原因,父類不允許子類覆蓋某個方法,此時可以把這個方法宣告為final型別 3 final變數...