2012-01-19 16 views
5
public class Null { 
    public static void greet() { 
     System.out.println("Hello world!"); 
    } 

    public static void main(String[] args) { 
     ((Null) null).greet(); 
    } 
} 

Wyjście programu: Hello world!.
Myślałem, że to rzuci NullPointerException.Dlaczego nie powoduje to wyjątku NullPointerException?

Dlaczego to się dzieje?

+1

Such oczu boli kodu - dlaczego o, dlaczego chcesz to zrobić? – JonH

+2

'.greet()' jest metodą 'statyczną', więc nie ma dostępu do instancji klasy. Musi jedynie znać typ obiektu ('Null'). – cheeken

Odpowiedz

6

Powodem jest to, że greet() jest metodą . Odniesienia do metod statycznych za pomocą zmiennych nie powodują dereferencji wskaźnika. Kompilator powinien był Cię o tym ostrzec.

Jeśli usuniesz modyfikator static wtedy dostaniesz npe

11

Metoda greet() jest statyczna, dlatego nie potrzebuje instancji zamykającej z Null. Właściwie możesz [i powinieneś] wywołać go jako: Null.greet();

Powiązane problemy