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”)會直接導致編譯時錯誤。這個嚴格的要求確保局部變數在使用之前始終被正確初始化。
以上是為什麼 Java 會針對未初始化的局部變數引發錯誤,但不會針對未初始化的實例變數引發錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!