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

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

resultado del programa: Hello world!.
Pensé que arrojaría un NullPointerException.¿Por qué esto no causa una NullPointerException?

¿Por qué está sucediendo?

+1

ojo Tal código de daño - por qué o por qué haces esto? – JonH

+2

'.greet()' es un método 'estático', por lo que no tiene acceso a la instancia de una clase. Simplemente necesita saber el tipo de objeto ('Null'). – cheeken

Respuesta

6

La razón es que greet() es un método static. Las referencias a métodos estáticos a través de variables no dan como resultado la desreferenciación del puntero. El compilador debería haberte advertido sobre esto.

Si se quita el modificador static por lo que recibirá el npe

11

método greet() es estático, por lo tanto, no necesita una instancia adjunta de Null. En realidad, puede [y debería] invocarlo como: Null.greet();

Cuestiones relacionadas