博客 / 詳情

返回

Java中try、catch、finally執行順序

try、catch和finally

  • try塊:用於捕獲異常。

    • 後面可以有0個或多個catch塊。
    • 只能有0個或1個finally塊。
    • try塊後面,如果沒有catch塊,則後面必須有一個finally塊。
    • 執行代碼捕獲異常後,進入catch塊,try中出現異常代碼處後面的代碼不會再繼續執行。
  • catch塊:用於處理處理try中捕獲的異常。

    • 可以有多個catch塊,進入一個catch塊後,執行完畢後,如果有finally塊,則進入finally塊。即使後面還有catch塊,也不會再進入其他catch塊。
  • finally塊:無論是否捕獲或處理異常,finally塊中的代碼都會被執行。

    • 當try塊中或者catch塊中遇到return語句時,先執行完finally裏面的代碼後,再執行return返回語句。

可以有多個catch塊,並且try塊後面,只能有0個或1個finally塊

public static void main(String[] args) {
    try {
        System.out.println("try...");
    }catch (ArithmeticException e){
        System.out.println("ArithmeticException...");
    }catch (NullPointerException e){
        System.out.println("NullPointerException...");
    }
    finally {
        System.out.println("finally...");
    }
}

//輸出結果:
//try...
//finally...

try塊後面,如果沒有catch塊,則後面必須有一個finally

public static void main(String[] args) {
    try {
        System.out.println("try...");
    }
    finally {
        System.out.println("finally...");
    }
}

//輸出結果:
//try...
//finally...

執行代碼捕獲異常後,進入catch塊,try中出現異常代碼處後面的代碼不會再繼續執行

public static void main(String[] args) {
    try {
        System.out.println("try...");
        int a = 0;
        String str = null;
        System.out.println(str.toString());
        a = a / 0;
    } catch (ArithmeticException e) {
        System.out.println("ArithmeticException...");
    } catch (NullPointerException e) {
        System.out.println("NullPointerException...");
    } finally {
        System.out.println("finally...");
    }
}

//輸出結果:
//try...
//NullPointerException...
//finally...

當try塊中或者catch塊中遇到return語句時,先執行完finally裏面的代碼後,再執行return返回語句。

public static void main(String[] args) {
    try {
        System.out.println("try...");
        return;
    } catch (ArithmeticException e) {
        System.out.println("ArithmeticException...");
    } catch (NullPointerException e) {
        System.out.println("NullPointerException...");
    } finally {
        System.out.println("finally...");
    }
}

//輸出結果:
//try...
//finally...
public static void main(String[] args) {
    try {
        System.out.println("try...");
        int a = 0;
        a = a / 0;
    } catch (ArithmeticException e) {
        System.out.println("ArithmeticException...");
        return;
    } catch (NullPointerException e) {
        System.out.println("NullPointerException...");
    } finally {
        System.out.println("finally...");
    }
}

//輸出結果:
//try...
//ArithmeticException...
//finally...
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.