08.異常機制
1.什么是異常
簡單分類:
- 檢查性異常:最具代表的是用戶錯誤或問題引起的異常,無法預見。如要打開一個不存在文件時。
- 運行時異常:運行時異常是可能被程序員避免的異常。
- 錯誤:錯誤不是異常,而是脫離程序員控制的問題。
2.Java 異常處理機制
Application.java
public class Application {
public static void main(String[] args) {
new Application().test(1,0);
/*int a = 1;
int b = 0;
//假設要捕獲多個異常,從小到大
try { //try 監控區域
}catch (Error e){ //catch(想要捕獲的異常類型) 捕獲異常
System.out.println("Error");
}catch (Exception e){ //catch(想要捕獲的異常類型) 捕獲異常
System.out.println("Exception");
}catch (Throwable e){ //catch(想要捕獲的異常類型) 捕獲異常
System.out.println("Throwable");
}finally { //處理善后工作
System.out.println("finally");
}*/
}
public void test(int a, int b){
if (b == 0) {
throw new ArithmeticException(); //主動拋出異常,一般在方法中使用
}
System.out.println(a/b);
}
}
快捷鍵:Ctrl+Alt+T
3.自定義異常
繼承 Exception 類
步驟:
- 創建自定義異常類;
- 在方法中通過 throw 關鍵字拋出異常對象;
- 如果在當前拋出異常的方法中處理異常,可以使用 try-catch 語句捕獲并處理;否則在方法的聲明處通過 throws 關鍵字指明要拋出給方法調用者的異常,繼續進行下一步操作;
- 在出現異常方法的調用者中捕獲并處理異常。
MyException.java
// 自定義異常類
public class MyException extends Exception {
//傳遞數字 > 10
private int detail;
public MyException(int a){
this.detail = a;
}
// toString: 異常的打印信息
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
'}';
}
}
Test.java
public class Test {
//可能會存在異常的方法
static void test(int a) throws MyException {
System.out.println("傳遞的參數為:" + a);
if (a > 10){
throw new MyException(a); //拋出
}
System.out.println("OK");
}
public static void main(String[] args) {
try {
test(11);
} catch (MyException e) {
System.out.println("MyException => " + e);
}
}
}
4.總結
- 處理運行時異常時,采用邏輯去合理規避同時輔助 try-catch 處理;
- 在多重 catch 塊后面,可以加一個 catch(Exception) 來處理可能會被遺漏的異常;(最大的異常)
- 對于不確定的代碼,也可以加上 try-cathch,處理潛在的異常;
- 盡量去處理異常,切忌只是簡單地調用 printStackTrace() 去打印輸出;
- 具體如何處理異常,要根據不同地業務需求和異常類型去決定;
- 盡量添加 finally 語句塊去釋放占用地資源。

浙公網安備 33010602011771號