Java 中未初始化的變數和成員
在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 initialised" } }
在此場景中,該類別在 doSomething 方法中包含兩個實例變數(a 和 b)和一個局部變數 (c)。雖然存取已初始化的實例變數 a 按預期工作,但使用未初始化的實例變數 b 或局部變數 c 會導致 b 出現運行時異常,c 出現編譯時錯誤。
差異原因?
Java 語言規格規定,物件類型的實例變數在未初始化時預設為 null,而物件類型的局部變數預設不初始化。這意味著存取空物件參考(如 b 的情況)將導致 NullPointerException。
對於局部變量,編譯器要求它們在使用前明確初始化,以避免潛在的未定義行為。此檢查在編譯期間執行,如果存取未初始化的局部變量,則會導致編譯時錯誤。
以上是為什麼 Java 中未初始化的變數和成員會表現出不同的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!