Day39--自定義異常及小結

1hahahahahahahaha發表於2024-11-25

Day39--自定義異常及小結

自定義異常

  • 使用Java內建的異常類可以描述在程式設計時出現的大部分異常情況。除此之外,使用者還可以自定義異常。使用者自定義異常類,只需繼承Exception類即可。
  • 在程式中使用自定義異常類,大體可分為以下幾個步驟:
    1. 建立自定義異常類。
    2. 在方法中透過throw關鍵字丟擲異常物件。
    3. 如果在當前丟擲異常的方法中處理異常,可以使用try - catch語句捕獲並處理;否則在方法的宣告處透過throws關鍵字指明要丟擲給方法呼叫者的異常,繼續進行下一步操作。
    4. 在出現異常方法的呼叫者中捕獲並處理異常。

示例:

package com.liu.exception.demo02;

//自定義異常類
public class Myexception extends Exception {

    //傳遞數字>10,異常
    private int detail;



    public Myexception(int a) {
        this.detail = a;
    }

    //toString;異常的列印資訊  Alt+Insert----toString

    @Override
    public String toString() {
        return "Myexception{" +
                "detail=" + detail +
                '}';
    }
}

寫完異常類之後,我們要寫測試類,測試我們寫的異常

​ 寫可能會存在異常的方法

package com.liu.exception.demo02;

public class Test {

    //可能會存在異常的方法
    static void test(int a) throws Myexception {
        System.out.println("傳遞的引數為:"+a);
        if(a>10){
            throw new Myexception(a);//丟擲
        }else {
            System.out.println("OK");
        }
    }

    public static void main(String[] args) {
        try {
            test(101);
        } catch (Myexception e) {
            System.out.println("Myexception--->"+e);
        }
    }
}

傳遞的引數為:101
Myexception--->Myexception{detail=101}

在 Java 程式中,程式的執行是從main方法開始的。

  1. 程式啟動
    • 當你執行這個 Java 程式時,Java 虛擬機器(JVM)會首先查詢main方法作為程式的入口點。
  2. main方法中的操作
    • 在這個main方法中,它呼叫了test(101)方法。
    • main方法執行到test(101)這一行時,程式的控制流會轉移到test方法。
  3. test方法的執行
    • test方法被呼叫後,它會執行其中的邏輯。在這個例子中,由於a = 101a>10條件成立,test方法會丟擲一個Myexception異常。
    • 因為test方法透過throws Myexception宣告瞭它可能丟擲這個異常,所以當異常被丟擲時,程式的控制流會返回到main方法中呼叫test方法的地方。
  4. 異常處理
    • main方法中,有一個try - catch塊來捕獲Myexception異常。當test方法丟擲Myexception時,catch塊會捕獲這個異常並執行其中的邏輯,即列印"Myexception--->"和異常資訊。

實際應用中的經驗總結

  • 處理執行時異常時,採用邏輯去合理規避同時輔助try - catch處理
  • 在多重catch塊後面,可以加一個catch (Exception)來處理可能會被遺漏的異常
  • 對於不確定的程式碼,也可以加上try - catch,處理潛在的異常
  • 儘量去處理異常,切忌只是簡單地呼叫printStackTrace()去列印輸出
  • 具體如何處理異常,要根據不同的業務需求和異常型別去決定
  • 儘量新增finally語句塊去釋放佔用的資源(類似Scanner)

相關文章