为什么这不会导致NullPointerException?

Sau*_*mar 6 java

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

    public static void main(String[] args) {
        ((Null) null).greet();
    }
}
Run Code Online (Sandbox Code Playgroud)

节目输出:Hello world!.
我以为它会抛出一个NullPointerException.

它为什么会发生?

ami*_*mit 12

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


Mis*_*ble 7

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

如果你删除static修改器,那么你将获得npe