值为null的对象为什么可以调用静态方法而不报错(空指针)呢?

今天刷题也是遇到了一个比较奇怪的题目,先让大家一起来看一看

 

因为hello方法是一个static修饰的类方法,可以用类名调用,也可以用实例调用。

此处用实例调用,但实例值为空,所以我起初认为编译肯定通过,但是会

抛出一个java.lang.NullPointerException的RuntimeException

但是运行结果却是在控制台成功的打印出了hello,这令我十分费解。

讲道理来说这个hello方法要想执行打印,要使用类名打印 Test.hello 才对

于是我用IDEA查看class文件一探究竟

从class文件可以看出,在编译的时候JVM发现调用静态方法的对象为null值后,自动将null值的对象替换为了类名调用。

这就是控制台之所以能打印出hello的原因 。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值