今天刷题也是遇到了一个比较奇怪的题目,先让大家一起来看一看
因为hello方法是一个static修饰的类方法,可以用类名调用,也可以用实例调用。
此处用实例调用,但实例值为空,所以我起初认为编译肯定通过,但是会
抛出一个java.lang.NullPointerException的RuntimeException
但是运行结果却是在控制台成功的打印出了hello,这令我十分费解。
讲道理来说这个hello方法要想执行打印,要使用类名打印 Test.hello 才对
于是我用IDEA查看class文件一探究竟
从class文件可以看出,在编译的时候JVM发现调用静态方法的对象为null值后,自动将null值的对象替换为了类名调用。
这就是控制台之所以能打印出hello的原因 。