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

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

Susan Sarandon
Susan Sarandon原創
2024-10-24 18:47:02265瀏覽

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

以上是為什麼 Java 會針對未初始化的局部變數引發錯誤,但不會針對未初始化的實例變數引發錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn