关于java的Exception的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)把异常的信息打印出来。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章