」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 Java 會針對未初始化的局部變數引發錯誤,但不會針對未初始化的實例變數引發錯誤?

為什麼 Java 會針對未初始化的局部變數引發錯誤,但不會針對未初始化的實例變數引發錯誤?

發佈於2024-11-22
瀏覽:763

Why Does Java Raise an Error for Uninitialized Local Variables but Not for Uninitialized Instance Variables?

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”)會直接導致編譯時錯誤。這項嚴格的要求確保局部變數在使用之前始終被正確初始化。

版本聲明 本文轉載於:1729738619如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3