標籤:exce 資訊 lis not nbsp message 結束 color 調用
上文主要說明了異常的產生、異常的捕獲、異常處理流程。程式中的異常是不可以避免的,那麼應該怎麼去處理異常尤為重要了。
處理異常的方式 1、只進行捕獲,不做任何處理
當異常發生時,上述代碼對異常進行了捕獲,捕獲發生後進入catch子句,catch子句裡面沒有任何代碼,實際上異常並沒有得到處理,因此catch子句執行完成後,catch區段之後的代碼將“好像沒有發生過什麼似的”繼續執行。換句話說,方式1沒有對異常做任何應對,只是將它給(吞)了。這樣的做法很危險,因為後續程式可能就會遭遇失敗,由於缺少對上述異常的必要處理與記錄,直接導致我們定位錯誤非常困難。
2、捕獲異常,簡單的列印
e.printStackTrace()進行異常情況輸出,在調試可能會有一定的協助,但是調試階段結束後,就不利於程式的維護。更加安全有理的方式是,在螢幕上輸出了異常發生的位置與導致異常的原因,同時還將異常詳細資料輸出到了一個記錄檔。
public class ExceptionDemo { public static void throwsTest(){ try { Class.forName("java.util.List"); } catch (ClassNotFoundException e) {//異常處理 System.out.println("Class.forName() 類載入異常:" + e.getMessage()); logFile(nfe); } } public static void main(String[] args) { throwsTest(); }} 2、throws 異常
throws 在方法的聲明處使用,表示此方法不處理異常,所有的異常交給被調用處進行處理,而調用處也可繼續向上遞交異常。
public class ExceptionDemo { public static void throwsTest() throws ClassNotFoundException{ Class.forName("java.util.List"); } public static void main(String[] args) throws ClassNotFoundException { throwsTest(); }}
此處都沒有對異常進行處理,最終有 JVM 都異常處理,進行背景異常輸出。
3、throw 異常
throw 主要用於方法體之中,表示人為的拋出一個異常類的執行個體化對象,常用來拋出自訂的異常,與 throws 配合使用將異常交由調用者處理。
備忘:自訂異常的方式
在正常使用的情況下,很少會定義自己的異常類,但是如果在學習架構,或者是你日後設計架構的時候都有可能定義許多屬於此架構的異常類。
上述的異常,最終的處理形式還是回到了方式2的處理規則上。進行錯誤資訊簡單輸出,完整資訊寫入記錄檔。
小結:
不要推諉或延遲處理異常,盡量就地解決他們,就地解決最好,並且需要實實在在的進行處理,而不是只捕捉,不動作。
java —— 異常(二)