public class Null {
public static void greet() {
System.out.println("Hello world!");
}
public static void main(String[] args) {
((Null) null).greet();
}
}
程序输出:Hello world!
。
我以为它会抛出NullPointerException
。
为什么会这样?
答案 0 :(得分:11)
方法greet()
是静态的,因此它不需要Null
的封闭实例。实际上,您可以[并且应该]将其调用为:Null.greet();
答案 1 :(得分:6)
原因是greet()
是static
方法。通过变量引用静态方法不会导致取消引用指针。编译器应该已经警告过你了。
如果您移除static
修饰符,则会获得npe