Warum löst das Aufrufen einer statischen Methode für eine Null-Objektreferenz keine NullPointerException aus?
In Java wird allgemein davon ausgegangen, dass das Aufrufen einer Methode auf eine Nullobjektreferenz löst eine NullPointerException aus. Diese Ausnahme wird jedoch nicht ausgelöst, wenn eine statische Methode für einen Nullverweis aufgerufen wird. Lassen Sie uns untersuchen, warum.
Statische Methodendefinition und Zugriff
Eine statische Methode ist der Klasse und nicht einer bestimmten Instanz zugeordnet. Es kann direkt über den Klassennamen aufgerufen werden, ohne dass eine Objektreferenz erforderlich ist.
Unerwartetes Verhalten
Der folgende Beispielcode veranschaulicht das unerwartete Verhalten:
<code class="java">public class Why { public static void test() { System.out.println("Passed"); } public static void main(String[] args) { Why NULL = null; NULL.test(); // DOES NOT Throw NullPointerException } }</code>
Grundlegender Grund
Der Schlüssel zum Verständnis, warum dieser Code funktioniert, liegt im Konzept des statischen Mitgliederzugriffs. Statische Mitglieder, einschließlich Methoden, gehören zum Typ und erfordern keinen Zugriff auf eine Objektinstanz.
Korrekter Aufruf statischer Methoden
Statische Methoden sollten direkt aufgerufen werden Verwenden des Klassennamens wie folgt:
<code class="java">Why.test(); // Correct way to invoke static method</code>
Nichtstatischer Zugriff über Objektreferenz
Während Java den Zugriff auf statische Mitglieder über Objektreferenzen ermöglicht, ist diese Vorgehensweise stark ausgeprägt entmutigt. Dies kann zu Verwirrung führen, da es den Zugriff auf ein Instanzmitglied impliziert, was falsch ist.
Auswirkungen des Objektreferenzzugriffs
Beim Zugriff auf ein statisches Mitglied über eine Objektreferenz , geschieht Folgendes:
Verwandte Fragen
Das Verständnis dieses Konzepts verdeutlicht auch, warum Java das Überschreiben statischer Methoden verbietet und warum eine statische Methode über aufgerufen wird Eine Instanz ist kein Fehler für den Java-Compiler.
Das obige ist der detaillierte Inhalt vonWarum löst der Aufruf einer statischen Methode für eine Null-Objektreferenz keine NullPointerException aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!