關於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)把異常的信息打印出來。

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