異常的概念和分類
上次做專案的時候用到了Exception類,今天開始我們就來講講Exception即相關類。
Exception是異常類,這裡首先需要理解一個概念:什麼是異常?
異常就是程式在編譯時發生的意想不到的情況,一般而言分為兩類:錯誤(Error)和異常(Exception)
Error: 分為兩種:
程式編寫出現語法錯誤
jdk壞了(這個就不舉例了)
可以看到報Error了,所以程式編寫出現語法錯誤會報Error
Exception: 所有異常類的父類(我們說的異常處理一般就是處理與Exception類相關的異常,Exception和Error合起來被稱作異常,但Exception自身也可以被稱為異常,通常我們說的異常指的就是Exception及其子類)
public class Exception extends Throwable {
可以看到Exception繼承了Throwable類,實際上Error也繼承了Throwable類
public class Error extends Throwable {
然後說一下異常是做什麼的:
Exception異常分為編譯時異常和執行時異常,由於我們無法預測程式裡可能出現的錯誤或使用者在使用程式時會出現的錯誤,所以需要異常類來告訴我們程式出現了異常,比如0不能作為除數,但使用者硬是用做了除數怎麼辦?
Demo:
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); System.out.println(1/a); }
輸入:
0
輸出:
Exception in thread "main" java.lang.ArithmeticException: / by zero
通過上面的Demo可以看到當0作為除數時會丟擲異常ArithmeticException
public class ArithmeticException extends RuntimeException {
ArithmeticException繼承了RuntimeException
RuntimeException類就是所有執行時異常類的父類,這裡又有了一個新的概念:執行時異常
Exception的子類被分為兩大類:編譯時異常,執行時異常
編譯時異常: 在編寫程式碼時如果有此類異常則必須被捕獲(catch)或丟擲(throw)
執行時異常: 可以不必再編寫程式碼時捕獲或丟擲
說明: 所有異常都可以被捕獲或丟擲,如果異常最終沒有被捕獲而是被丟擲的話程式會立即終止執行並列印異常資訊,另外,如果不捕獲執行時異常,預設會丟擲執行時異常
編譯時異常的特徵: 直接繼承自Exception類,不繼承RuntimeException,必須被顯式的捕獲或丟擲
執行時異常的特徵: 繼承自RuntimeException類,可以不被顯式的捕獲或丟擲,如果不被顯式的捕獲則預設會被丟擲
說了半天啥叫丟擲異常啥叫捕獲異常?下節課講。