筆記:捕獲異常/丟擲異常/自定義異常
阿新 • • 發佈:2021-08-19
捕獲異常
package com.Linz.method; public class Test { public static void main(String[] args) { int a = 1; int b = 0; // try監控區域 // try catch 區域是必須的 // finally 區域不是必要的 // catch可多個並用,但最大的異常要寫到最後面:從小到大 try{ System.out.println(a/b); }catch (ArithmeticException e){ System.out.println("程式出現ArithmeticException異常,變數b不能為0"); }finally { System.out.println("執行finally"); } // IDEA快捷鍵:Ctrl + Alt + T try { System.out.println(a/b); } catch (Exception e) { e.printStackTrace(); } } }
丟擲異常
package com.Linz.method; public class Test { //假設這個方法中,處理不了這個異常,方法上丟擲異常 public void test(int a,int b) throws ArithmeticException{ //丟擲異常關鍵字 throw/throws if (b==0){ //throw 主動丟擲異常,在控制檯中輸出異常 一般在方法中使用 throw new ArithmeticException(); } } public static void main(String[] args) { new Test().test(1,0); } }
自定義異常
package com.Linz.method; //自定義的異常類 public class MyExcption extends Exception{ //傳遞數字 > 10 ; private int detail; public MyExcption(int a) { this.detail = a; } //toString 異常的列印資訊 @Override public String toString() { return "MyExcption{" + "detail=" + detail + '}'; } }
package com.Linz.method;
public class Test {
//可能會存在異常的方法
public static void test(int a) throws MyExcption{
System.out.println("傳遞的引數為"+a);
if (a>10){
throw new MyExcption(a);
}
System.out.println("OK");
}
public static void main(String[] args) {
try {
test(11);
} catch (MyExcption e) {
System.out.println("MyException=>"+e);
}
}
}
注意
-
處理執行時異常時,採用邏輯去合理規避同時輔助try-catch處理
-
在多重catch塊後面,可以加一個catch(Exception)來處理可能會被遺漏的異常
-
對於不確定的程式碼,也可以加上try-catch,處理潛在的異常
-
儘量去處理異常,切忌只是簡單的呼叫printStackTrace()去列印輸出
-
具體如何處理異常,要根據不同的業務需求和異常型別去決定
-
儘量新增finally語句去釋放佔用的資源