1. 两段程序入手进行理解
第一个程序
package null_realize;
public class NullRealize {
private static void hh(){
System.out.println("hh");
}
public static void main(String []args){
((NullRealize)null).hh();
}
}
输出:hh
我们进行分析,应该静态方法中不能再次进行静态方法的调用,这里为什么就可以了呢?
null其实是可以转化成任何数据类型,所以这里的null就被强制转化成了NullRealize对象,所以这里可以直接进行调用静态方法,但是很重要的一点是,这个被强制转化的对象,是无效对象,返回的是null。所以,用这个对象,去调用非静态方法,会抛出空指针异常,例如下代码:
package null_realize;
public class NullObject {
private void hhh(){
System.out.println("hhh");
}
public static void main(String []args){
((NullObject)null).hhh();
}
}
输出:Exception in thread “main” java.lang.NullPointerException
2. 更加详细的解释,见大佬博客
https://blog.csdn.net/w605283073/article/details/72896651