Heim  >  Artikel  >  Java  >  Warum löst der Aufruf einer statischen Methode für eine Null-Objektreferenz keine NullPointerException aus?

Warum löst der Aufruf einer statischen Methode für eine Null-Objektreferenz keine NullPointerException aus?

DDD
DDDOriginal
2024-11-03 03:57:30736Durchsuche

Why Doesn't Invoking a Static Method on a Null Object Reference Throw a NullPointerException?

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:

  • Die Nullreferenzprüfung wird umgangen, da statische Elemente keine Instanz erfordern.
  • Der spezifische Laufzeittyp des Objekts (falls vorhanden) ist irrelevant , was sich vom Zugriff auf Instanzmitglieder unterscheidet.

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!

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