1. 程式人生 > >throw new RuntimeException(e)與e.printStackTrace( )的區別

throw new RuntimeException(e)與e.printStackTrace( )的區別

throw new RuntimeException(e)與e.printStackTrace( )的區別

2018年04月29日 11:07:58 zq愛生活愛程式碼 閱讀數:115

轉載自:https://blog.csdn.net/xuzhuaaron1/article/details/73611404
e.printStackTrace( )是列印異常棧資訊,而throw new RuntimeException(e)是把異常包在一個執行時異常中丟擲。

我們常看見這種寫法
try{
....

}catch(Exception e){
e.printStackTrace( );
throw new RuntimeException(e);
//throw new RuntimeException(e.getMessage());



}
這是處理沒法進一步處理的異常的一般做法。try塊中出現了一個異常,它被catch住了,我們首先要在標準輸出上打印出異常但是如果沒有throw這句,這個錯誤就靜悄悄地被catch塊吃掉了,程式會繼續執行。可這個時候很可能你的程式的狀態已經不對了,繼續下去也沒有什麼意義,所以應該繼續丟擲這個異常。你當然可以寫throw e;,但是這個e是一般的異常,如果這樣丟擲的話,你得在這個函式頭上用throws來宣告,比如:
public void abc() throws Exception
然後呼叫這個函式的函式也還得這麼幹,所以一般的處理是把e包裝成執行時異常:new  RuntimeException(e),這樣就不需要在函式頭聲明瞭。

但這只是一般的處理方法,在實際程式中不可不顧實際情況和需求生搬硬套。
 
e.printStackTrace();在實際開發時意義不大,因為部署以後不會有人看控制檯,這句很多情況下會被記錄日誌的程式碼代替。 throw new RuntimeException就是要把異常繼續丟擲,要麼由上層方法解決,要麼會終止程式執行,比如這裡,如果初始化都無法正確完成,再繼續執行下去也沒有必要了。至於說多列印一句話,還是因為在工具環境下,你比較關注控制檯,實際部署環境,沒人看控制檯資訊,都會去看日誌中記錄的異常資訊。 有結束程序的作用。
try catch如果不寫throw new RuntimeException 只是不執行本方法後面的程式碼,然後跳出本方法後繼續執行其他方法,不會結束程式。 如果在其他應用中,還可以把異常拋給上層呼叫者來處理。