Day12_面向物件 異常處理機制
阿新 • • 發佈:2020-11-28
異常處理機制
- 丟擲異常
- 捕獲異常
- 異常處理五個關鍵字
- try、catch、finally、throw、throws
package com.exception.demo01; public class Test { public static void main(String[] args) { int a = 1; int b = 0; try { //try監控區域 System.out.println(a/b); }catch (ArithmeticException e){ System.out.println("程式出現異常,變數b不能為0"); }finally { //處理善後工作 System.out.println("finally"); } } }
程式出現異常,變數b不能為0
finally
Process finished with exit code 0
package com.exception.demo01; public class Test { public static void main(String[] args) { int a = 1; int b = 0; //假設要捕獲多個異常:從小到大! try { //try監控區域 new Test().a(); }catch (Error e){ System.out.println("Error"); }catch (Exception e){ System.out.println("Exception"); }catch (Throwable e){//catch 捕獲異常 System.out.println("程式出現異常,變數b不能為0"); }finally { //處理善後工作 System.out.println("finally"); } //finally 可以不要finally,假如IO,資源,關閉! } public void a(){ b(); } public void b(){ b(); } }
//執行結果
Error
finally
Process finished with exit code 0
package com.exception.demo01; public class Test { public static void main(String[] args) { try { new Test().test(1,0); } catch (ArithmeticException e) { e.printStackTrace(); } } //假設這方法中throw,處理不了這個異常,方法上丟擲異常(throws) public void test(int a,int b) throws ArithmeticException{ if (b==0){//方法裡邊用throw throw new ArithmeticException();//主動丟擲異常,一般在方法中使用 } } }
java.lang.ArithmeticException
at com.exception.demo01.Test.test(Test.java:16)
at com.exception.demo01.Test.main(Test.java:6)
Process finished with exit code 0
自定義異常
- 使用Java內建的異常類可以描述在程式設計時出現的大部分異常情況。除此之外,使用者還可以自定義異常。使用者自定義異常類,只需繼承Exception類即可。
- 在程式中使用自定義異常類,大體可分為以下幾個步驟:
- 建立自定義異常類。
- 在方法中通過throw關鍵字丟擲異常物件。
- 如果在當前丟擲異常的方法中處理異常,可以使用try-catch語句捕獲並處理;否則在方法的宣告處通過throws關鍵字指明要丟擲給方法呼叫者的異常,繼續進行下一步操作。
- 在出現異常方法的呼叫者中捕獲並處理異常。
package com.exception.demo02;
//自定義異常類
public class MyException extends Exception {
//傳遞數字>10;
private int detail;
//Alt+Insert構造器
public MyException(int a) {
this.detail = a;
}
//toString:異常的列印資訊
@Override
public String toString() {
return "MyException{" +detail + '}';
}
}
package com.exception.demo02;
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);
}
//Alt+Enter提示鍵
}
}
實際應用中的經驗總結
- 處理執行時異常時,採用邏輯去合理規避同時輔助try-catch 處理
- 在多重catch塊後面,可以加一個catch (Exception)來處理可能會被遺漏的異常
- 對於不確定的程式碼,也可以加上try-catch,處理潛在的異常
- 儘量去處理異常,切忌只是簡單地呼叫printStackTrace()去列印輸出
- 具體如何處理異常,要根據不同的業務需求和異常型別去決定
- 儘量新增finally語句塊去釋放佔用的資源