天天看點

java知識點拾遺(異常機制)

  1. 異常分類
  2. java知識點拾遺(異常機制)
  3. 異常的繼承結構
  4. java知識點拾遺(異常機制)
  • Error:程式無法運作
  • CheckedException:編譯的時候就報錯
  • UncheckedException:運作時才報錯
  1. 捕獲異常
  • try-catch-finally語句塊的執行過程

    程式首先執行可能發生異常的try語句塊。如果try語句沒有出現異常則執行完後跳至finally語句塊執行;如果try語句出現異常,則中斷執行并根據發生的異常類型跳至相應的catch語句塊執行處理。catch語句塊可以有多個,分别捕獲不同類型的異常。catch語句塊執行完後程式會繼續執行finally語句塊。finally語句是可選的,如果有的話,則不管是否發生異常,finally語句都會被執行。

  • 注意事項
1) 即使try和catch塊中存在return語句,finally語句也會執行。是在執行完finally語句後再通過return退出。
2) finally語句塊隻有一種情況是不會執行的,那就是在執行finally之前遇到了System.exit(0)結束程式運作。      
  1. 抛出異常(throws)

    當CheckedException産生時,不一定立刻處理它,可以再把異常throws出去。如果一個方法中可能産生某種異常,但是并不能确定如何處理這種異常,則應根據異正常範在方法的首部聲明該方法可能抛出的異常。如果一個方法抛出多個已檢查異常,就必須在方法的首部列出所有的異常,之間以逗号隔開。

  • 注意

    方法重寫中聲明異常原則:子類重寫父類方法時,如果父類方法有聲明異常,那麼子類聲明的異常範圍不能超過父類聲明的範圍。

  1. 自定義異常
throw new MyException("自定義異常");      
  1. try-with-resources

    我們知道,在Java程式設計過程中,如果打開了外部資源(檔案、資料庫連接配接、網絡連接配接等),我們必須在這些外部資源使用完畢後,手動關閉它們。因為外部資源不由JVM管理,無法享用JVM的垃圾回收機制,如果我們不在程式設計時確定在正确的時機關閉外部資源,就會導緻外部資源洩露,緊接着就會出現檔案被異常占用,資料庫連接配接過多導緻連接配接池溢出等諸多很嚴重的問題。

  • 傳統的資源關閉方式
//這種方式關閉資源,代碼顯得比較臃腫
public static void main(String[] args) {
    FileInputStream inputStream = null;
    try {
        inputStream = new FileInputStream(new File("test"));
        System.out.println(inputStream.read());
    } catch (IOException e) {
        throw new RuntimeException(e.getMessage(), e);
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
        }
    }
}      
  • try-with-resources方式關閉資源
public static void main(String[] args) {
    try (FileInputStream inputStream = new FileInputStream(new File("test"))) {
        System.out.println(inputStream.read());
    } catch (IOException e) {
        throw new RuntimeException(e.getMessage(), e);
    }
}