Nicht initialisierte Variablen und Mitglieder in Java
Betrachten 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3