2013-01-02 11 views
8

Mögliche Duplizieren:
How come invoking a (static) method on a null reference doesn’t throw NullPointerException?Aufruf statische Methode in Java

Kann jemand erklären, warum die Ausgabe des folgenden Programms ist

public class Test4{ 

    public static void method(){ 
    System.out.println("Called"); 
    } 

    public static void main(String[] args){ 
    Test4 t4 = null; 
    t4.method(); 
    } 
} 

" Called" Ich weiß, wir können statische Methode mit Klassenreferenz aufrufen, aber h Ich rufe mit Null-Referenz an. Bitte meine Zweifel

Antwort

13

Im Byte Code

Test4 t4 = null; 
t4.method(); 

wird klären

Test4 t4 = null; 
Test4.method(); 

Compiler den Aufruf mit dem Klassennamen für statische Methoden umwandeln würde. beziehen Sie sich auf question auf SO, die ich selbst es gefragt habe.

0

Statische Methoden können über den Klassennamen oder eine Instanz aufgerufen werden. Ich würde versuchen zu vermeiden, sie von einer Instanz zu nennen (auch eine Reihe von Tools warnen Sie wegen schlechter Übung).

2

Es spielt keine Rolle, ob die Instanz null ist, weil Sie eine statische Methode aufrufen. Denken Sie auf diese Weise.

Jede statische Methode ist äquivalent mit einer Klassenmethode während eine nicht statische Methode mit einer Instanzmethode äquivalent ist.

Daher spielt es keine Rolle, welchen Wert die Instanz benötigt, solange Sie mit statischen Methoden oder Elementen arbeiten.

Verwandte Themen