java複習第6天---6.1---異常
目錄
內容
1、概念
異常意味非正常,發生了意想不到的情況。在Java語言種,異常是類,產生異常就是拋出異常類的對象,Java處理異常的方式爲中斷處理。
2、異常體系
如圖 2-1:
-
Throwable:所有異常類的父接口
-
Error:錯誤類,表示嚴重的問題,正常程序不應該試圖捕獲的。
-
Exception:異常類(編譯期異常+運行前異常),出現問題,程序應該捕獲的異常
- RuntimeException:運行時異常類
- 編譯期異常:Exception類和任何不是RuntimeException的子類
3、異常處理
異常處理5個關鍵字:try、catch、finally、throw和throws.
3.1、拋出異常
-
throw
- 作用:在指定的地方拋出指定的異常
- 格式:throw new xxxException(“異常原因”);
- 注意
- throw語句必須放在方法內
- throw關鍵字後面new的必須是Exception或者Exception的子類
- throw拋出的異常對象,必須處理
- throw如果拋出的RuntimeException或者RuntimeException的子類,可以不用處理,那麼JVM會幫我們執行默認處理,中斷程序,拋出異常。
- throw拋出的是編譯期異常,那麼編譯不會通過,不會生成.class文件
-
聲明異常throws
-
當程序種拋出異常,但是我們沒有捕獲處理,那麼必須適用聲明異常throws,把異常拋給調用者
-
格式:
修飾符 返回值類型 方法名(參數列表) throws 異常 {...}
-
注意
- 異常聲明必須寫在方法參數列表後和方法體之前
- throws 後面必須是Exception或者Exception的子類
- 方法內如果拋出多個異常,那麼throws 也需聲明多個異常,如果多個異常有父子關係,那麼可以只拋出父異常
- 調用了聲明拋出異常的方法,必須對異常處理或者繼續throws ,直至上層調用者處理或者最終由JVM處理
-
3.2、try catch finally
異常處理格式:
try {
代碼塊
}catch(...) {
...
}catch(...) {
...
}...
finally {
...
}
-
基本流程解析:
- 如果try代碼塊出現異常,則取匹配catch異常,執行相應的catch代碼塊;如果沒有出現異常,則不會取匹配catch
- 不管出不出現異常,程序最終會執行finally代碼塊種的內容
-
catch匹配規則
- 自上而下,一旦匹配成功不會向下匹配。
- 一般子類異常放置在上面,才能保證優先匹配子類異常
-
finally:一般用於釋放資源等等,比如打開的文件句柄。
-
示例3.2-1:
package exception.exception; public class TestException1 { public static void main(String[] args) { try { int a = 5/0; int[] arr = {3, 22, 99}; arr[3] = 33; }catch(ArithmeticException e) { System.out.println(e); }catch(IndexOutOfBoundsException e) { e.printStackTrace(); }catch(Exception e) { e.printStackTrace(); }finally { System.out.println("finally 代碼塊"); } } } 測試結果: java.lang.ArithmeticException: / by zero finally 代碼塊 註釋掉try代碼塊第一行測試結果 java.lang.ArrayIndexOutOfBoundsException: 3 finally 代碼塊 at exception.exception.TestException1.main(TestException1.java:8)
4、自定義異常
以爲一些業務邏輯需求,現有的異常不能滿足要求,比如登陸註冊用戶名不符和要求等等,我們需要自定義;異常。
-
格式:
修飾符 class xxxException extends Exception或者子類 { public xxxException() {...} // 無慘構造 public xxxException(String e) {...};// 代參構造 ... }
-
注意:
- 自定義異常類一般以Exception結尾,表示是異常
- 自定義異常必須是Exception或者Exception的子類
- 自定義異常必須提供一個無慘構造和一個帶參構造
後記 :
本項目爲參考某馬視頻開發,相關視頻及配套資料可自行度娘或者聯繫本人。上面爲自己編寫的開發文檔,持續更新。歡迎交流,本人QQ:806797785
前端項目源代碼地址:https://gitee.com/gaogzhen/vue-leyou
後端JAVA源代碼地址:https://gitee.com/gaogzhen/JAVA