Java - 例外處理 (Exception)

By sunwc 2023-03-22 Java
  • Error:此錯誤是 Java虛擬機 (JVM) 無法解決的嚴重問題。例如 JVM系統內部錯誤、資源耗盡等嚴重情況
    1. java.lang.StackOverflowError堆疊溢出 => 例如 recursion終止條件沒寫好
    2. java.lang.OutOfMemoryError 堆積溢出 => 例如 Integer[] arr = new Integer[1024*1024*1024];
  • Exception:由於程式編輯錯誤或偶然的外在因素的一般性問題,可以使用針對性的程式進行處理

請看以下error/ exception 架構圖進行了解:

例外體系結構:

  • java.lang.Throwable
    • java.lang.Error: 一般不編寫針對性的程式進行處理
    • java.lang.Exception: 可以進行例外的處理
      • compile 時異常(checked)
        • IOExpetion
          • FileNotFoundException
        • ClassNotFoundException
      • run 時異常(unchecked, RuntimeException)
        • NullPointerException
        • ArrayIndexOutBoundsException
        • StringIndexOutBoundsException
        • ClassCastException
        • NumberFormatException
        • InputMismatchException
        • ArithmeticException

例外處理的方式:

  • 方式一、try-catch-finally

    狼來了,自己把狼驅走,保護好羊群

    能夠處理 compile 時期的例外,run 時期仍可能出現例外,相當於延遲例外情況到執行的時候才可能會出現;通常我們在開發時一定是先處理編譯時例外,執行時例外視情況處理

  • 方式二、throws + 例外類型

    狼來了,自己趕快大喊,捕狼人來幫幫忙哦~ (自己沒辦法保護好羊群)

    拋給方法的調用者去處理


手動拋出一個例外物件,視業務邏輯必要時使用:

使用 throw 關鍵字

class Student {

    private int id;

    public void register(int id) throws Exception {

        if (id > 0) {
            this.id = id;
        } else {
            // 手動拋出例外物件
            throw new RuntimeException("您輸入的學號是不合規範的");
        }
    }
}

總結

本文介紹

1.Error/Exception 架構 父子層 關係

因此我們在需要捕獲多個例外時,若例外類別之間彼此有父子類關係,就先寫子類、再寫父類

2.例外處理的兩種方式

3.視業務邏輯使用 throw 關鍵字拋出例外物件並輸出自定義訊息