Java e.getMessage 错误信息为null

解决方案:用e.printStackTrace()
e.getMessage()为null也很正常,NullPointException的getMessage()就为null
我在抛出Exception时也可以直接  throw new MyException(); 这样getMessage()返回的就是null了


这几天做的项目,测试小组说测出来的异常日志有问题,没有把异常的信息打印出来,但是我回去看代码每一个catch语句里面都有getMessage呀,怎么getMessage会为空的呢?很是不懂其中的原因,之后上百度搜了下资料,觉得有下面一丢丢的总结,不知道正确不,不妥的地方希望各位大神帮我补充下可怜可怜

Java的异常关系图如下

测试小组说的那个没有getMessage信息打印出来的异常就是一个nullPointerException异常,后面我又去动手试了下其他的几个runtime异常,发现getMessage都是为空的,之后我又去试了下SQLException和IOException,发现者两种异常的在catch的时候getMessage是不为null的。由此我觉得runtime异常发生的时候JVM调用的是父类无参的构造器

public Exception() {
        super();
    }

而SQLException和IOException异常发生的时候JVM调用的是父类有参的构造器

public Exception(String message) {
        super(message);
    }

所以SQLException和IOException的getMessage不为null,而runtime异常却为空。但是为什么SQLException和IOException调用的是有参的,而runtime异常调用的是无参,我还不知道具体原因,但是避免getMessage为null的话可以使用e.printStackTrace()或者logger.error("msg", e)把异常的信息打印出来。

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值