为什么这不会导致NullPointerException?

时间:2012-01-19 20:38:52

标签: java

public class Null {
    public static void greet() {
        System.out.println("Hello world!");
    }

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

程序输出:Hello world!。 我以为它会抛出NullPointerException

为什么会这样?

2 个答案:

答案 0 :(得分:11)

方法greet()是静态的,因此它不需要Null的封闭实例。实际上,您可以[并且应该]将其调用为:Null.greet();

答案 1 :(得分:6)

原因是greet()static方法。通过变量引用静态方法不会导致取消引用指针。编译器应该已经警告过你了。

如果您移除static修饰符,则会获得npe