Java異常的使用

1.exception的分類

java將異常分爲兩種,checked exception和unchecked exception(通常指runtimeException)。java

checked exception:不是調用者非法使用或傳入不正確參數形成的異常,運行時遇到此類異常須要調用者根據狀況做出反應,捕獲後程序能夠繼續運行,代碼中必須顯示捕獲,若是拋出此類異常也須要在函數名後顯示加入throws關鍵字數組

public static void checkedExceptionMaker() throws Exception{
    throw new Exception("checkExceptionMaker exception");
}

unchecked exception:程序運行期間,因調用者不正確使用致使的異常發生,此時可使用運行時異常,並使得程序遇到此異常時,被終止,可能拋出unchecked exception的函數無需指定throws異常類型tcp

public static void runtimeExceptionMaker() { 
    throw new RuntimeException("runtimeExceptionMaker exception"); 
}

2.exception的捕獲

checked exception須要顯示捕獲,不然會編譯出錯,而unchecked exception是可選地捕獲,萬一不捕獲就會沿函數棧(調用函數軌跡)往上拋出,最終終止程序。函數

 1 public static void main(String[] argv) {
 2 
 3         try {
 4             checkedExceptionMaker();
 5             System.out.println("pass checked exception");
 6         } catch (Exception e) {
 7             e.printStackTrace();
 8         }
 9         System.out.println("program is still running...");
10         runtimeExceptionMaker();
11 
12         System.out.println("program is done");
13 
14     }

運行結果:spa

java.lang.Exception: checkExceptionMaker exception
    at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.checkedExceptionMaker(ExceptionClassify.java:26)
    at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.main(ExceptionClassify.java:13)
Exception in thread "main" java.lang.RuntimeException: runtimeExceptionMaker exception
    at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.runtimeExceptionMaker(ExceptionClassify.java:30)
    at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.main(ExceptionClassify.java:19)
program is still running...

注意行5,12的代碼沒有被執行。code

/*何時用check exception,何時須要unchecked exception?*/blog

checked exception是對接口調用者(後面簡稱調用者)輸入參數可預知的異常進行檢查, 好比除數爲0,某些必要參數爲null,打開了不存在的文件之類,這些問題是由調用者引入,並不是接口源碼的漏洞,咱們就能夠大膽使用checked exception,以告知調用者可能存在的輸入問題,調用者以try-catch方式捕獲這些異常,並根據異常類型將程序引導到正常流程中去。繼承

unchecked exception多是接口自己問題而致使異常的出現,好比數組越界訪問,因端口號被佔用使得建立tcp客戶端失敗,這些異常可能存在如下特色:
1.接口源碼自己有問題;2.異常產生使後續程序沒法運行,這時候應該終止程序並讓接口開發者修改潛在問題,從新發布接口,這時候咱們能夠選用unchecked exception。接口


 /*unchecked exception是否須要try-catch*/開發

有時候爲了程序不所以崩潰,須要對unchecked exception也進行try-catch,這依賴於對接口源碼必定的熟悉程度,可是因爲unchecked exception的發生,調用者沒法引導程序納入正常流程,因此即便try-catch捕獲到異常,後續的調用也會繼續拋出異常,try-catch的意義就不大了,並且會令咱們的代碼滿布try-catch代碼塊。

溫和的作法是咱們能夠選擇try-catch可能發生的unchecked exception,並重試數次或累計拋出次數,若是依然得不到解決,咱們本身再拋出一個runtime exception來結束當前的程序。

3.異常/捕獲的嵌套

 

4.繼承exception,利用code減小catch數量

 

5.exception捕獲原理

相關文章
相關標籤/搜索