Java 中未初始化的變數和成員
考慮以下程式碼片段:
public class TestClass { private String a; private String b; public TestClass() { a = "initialized"; } public void doSomething() { String c; a.notify(); // This is fine b.notify(); // This is fine - but will end in an exception c.notify(); // "Local variable c may not have been initialized" } }
雖然「b」和「c」都沒有初始化,但編譯器會針對「c」引發編譯時錯誤,但不會針對「b」引發編譯時錯誤。這種差異源自於語言初始化實例變數和局部變數的規則。
物件類型的實例變數(如“a”和“b”)在未明確初始化時預設初始化為 null。這就是為什麼存取「b.notify()」不會立即導致錯誤,因為它實際上等同於「null.notify()」。然而,這種存取最終會在程式碼執行時觸發 NullPointerException。
相較之下,物件類型的局部變數預設不會初始化。嘗試存取未初始化的局部變數(例如“c”)會直接導致編譯時錯誤。這項嚴格的要求確保局部變數在使用之前始終被正確初始化。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3