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>
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:
Verwandte Überlegungen
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!