1. 程式人生 > >關於java的Exception的getMessage()是否為null的問題

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