在看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變數...