Heim  >  Artikel  >  Java  >  Warum löst Java einen Fehler für nicht initialisierte lokale Variablen aus, aber nicht für nicht initialisierte Instanzvariablen?

Warum löst Java einen Fehler für nicht initialisierte lokale Variablen aus, aber nicht für nicht initialisierte Instanzvariablen?

Susan Sarandon
Susan SarandonOriginal
2024-10-24 18:47:02265Durchsuche

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

Nicht initialisierte Variablen und Mitglieder in Java

Beachten Sie den folgenden Ausschnitt:

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"
    }
}

Obwohl sowohl „b“ als auch „c“ nicht initialisiert sind, löst der Compiler einen Kompilierzeitfehler für „c“ aus, nicht jedoch für „b“. Dieser Unterschied ergibt sich aus den Regeln der Sprache zum Initialisieren von Instanzvariablen und lokalen Variablen.

Instanzvariablen vom Objekttyp (wie „a“ und „b“) werden standardmäßig auf Null initialisiert, wenn sie nicht explizit initialisiert werden. Aus diesem Grund führt der Zugriff auf „b.notify()“ nicht zu einem unmittelbaren Fehler, da es praktisch äquivalent zu „null.notify()“ ist. Dieser Zugriff löst jedoch letztendlich eine NullPointerException aus, wenn der Code ausgeführt wird.

Im Gegensatz dazu werden lokale Variablen vom Objekttyp standardmäßig nicht initialisiert. Der Versuch, auf eine nicht initialisierte lokale Variable wie „c“ zuzugreifen, führt direkt zu einem Fehler bei der Kompilierung. Diese strenge Anforderung stellt sicher, dass lokale Variablen vor ihrer Verwendung immer ordnungsgemäß initialisiert werden.

Das obige ist der detaillierte Inhalt vonWarum löst Java einen Fehler für nicht initialisierte lokale Variablen aus, aber nicht für nicht initialisierte Instanzvariablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn