Java 建構函式中欄位初始化的混亂
開發人員可能會遇到在類別建構函式中宣告和初始化的欄位傳回null或預設值的情況詢問。這種行為源自於 Java 中 遮蔽 的概念。
局部變數遮蔽
當局部變數在建構函式中宣告時,它們具有與實例變數同名。然而,Java 優先考慮其範圍內的局部變量,使實例變數黯然失色。考慮以下範例:
public class Sample { private String[] elements; private int capacity; public Sample() { int capacity = 10; String[] elements; elements = new String[capacity]; } }
在此建構函式中,局部變數容量初始化為 10,但實例變數容量保持未初始化,導致預設值為 0。同樣,局部變數元素為分配了一個數組引用,但實例變數元素仍為 null。
使用建構子進行遮蔽參數
建構子參數也可以隱藏同名的實例變數。參數的聲明優先,因此無法直接存取實例變數。要引用實例變量,請使用帶有this 主表達式的限定名稱,如下所示:
public Sample(int capacity) { this.capacity = capacity; }
推薦
為了避免混淆,這是最佳實踐盡可能為局部變數、建構函式參數和實例變數使用唯一的名稱。這可以防止意外的陰影並確保欄位按預期初始化。
以上是為什麼我的 Java 建構函數欄位回傳 Null 或預設值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!