Heim > Java > javaLernprogramm > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-11-04 04:29:01
Original
353 Leute haben es durchsucht

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

Statischer Methodenaufruf auf Nullreferenzen: Warum die Überraschung

Bei der Arbeit mit Java stößt man häufig auf die Regel, dass der Aufruf einer Methode auf a Eine Nullreferenz löst eine NullPointerException aus. Beachten Sie jedoch den folgenden Codeausschnitt:

<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(); // Doesn't throw NullPointerException
  }

}</code>
Nach dem Login kopieren

Zu unserer Überraschung löst das obige Programm keine NullPointerException aus. Warum ist das so?

Statische Methoden verstehen

Der Schlüssel zum Verständnis dieses Verhaltens liegt in der Natur statischer Methoden. Statische Mitglieder, einschließlich Methoden, gehören zur Klasse und nicht zu bestimmten Instanzen. Sie können direkt über den Typnamen aufgerufen werden, ohne dass eine Objektreferenz erforderlich ist.

Im obigen Beispiel ist test() eine statische Methode. Wenn es mit NULL.test() aufgerufen wird, behandelt Java dies als Aufruf von Why.test(), da die tatsächliche Objektreferenz irrelevant ist.

Statischer Zugriff über Objektreferenzen (vermeiden!)

Während Java den Zugriff auf statische Mitglieder über Objektreferenzen ermöglicht, wird von dieser Praxis dringend abgeraten. Dies kann zu Verwirrung führen, da es die tatsächliche Semantik des Zugriffs auf statische Mitglieder verbirgt.

Was beim Zugriff auf statische Mitglieder wichtig ist

Beim Zugriff auf ein statisches Mitglied über eine Objektreferenz Ausdruck ist nur der deklarierte Typ der Referenz von Bedeutung. Dies impliziert Folgendes:

  • Wenn die Referenz null ist, wird keine Ausnahme ausgelöst, da keine Instanz erforderlich ist.
  • Der Laufzeittyp des Objekts hat keinen Einfluss auf den Aufruf; Es erfolgt kein dynamischer Versand.

Verwandte Überlegungen

  • Java erlaubt kein Überschreiben statischer Methoden, da diese an die Klasse gebunden sind, nicht Instanzen.
  • Der Zugriff auf statische Mitglieder über Instanzreferenzen sollte aus Gründen der Klarheit und zur Vermeidung möglicher Missverständnisse vermieden werden.

Das obige ist der detaillierte Inhalt vonWarum löst der Aufruf einer statischen Methode für eine Nullreferenz keine NullPointerException aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage