1. 程式人生 > 其它 >try{}catch{}finally{}的return執行邏輯

try{}catch{}finally{}的return執行邏輯

技術標籤:java

try{}catch{}finally{}程式碼塊裡面都有return:

public class DemoTest {
    public static void main(String[] args) {
        int num = getNum();
        System.out.println("執行結果:   " +num);
    }

    public static int getNum() {
        int i;
        try {
            i = 8;
            System.out.println("try塊中的i的值:  "+i);
            int a = 90 / 0;
            return i;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            i = 5;
            return i;
        } finally {
            // finally中的程式碼一定會執行
            System.out.println("執行finally~~~");
            i = 6666;// 此處重新給i賦值
            System.out.println("finally 塊中的值:  "+i);
            return i;// 無論如何總會在此處返回i的值
        }
    }
}

執行結果:
無論是否發生異常總是返回finally中的值.
在這裡插入圖片描述

return在try{}catch{}程式碼塊裡面,finally{}程式碼塊中沒有return:

public class DemoTest {
    public static void main(String[] args) {
        int num = getNum();
        System.out.println("執行結果:   " +num);
    }

    public static int getNum() {
        int i;
        try {
            i = 8;
            System.out.println("try塊中的i的值:  "+i);
//            int a = 90 / 0;
            return i;// 沒有異常會在此處返回i的值
        } catch (Exception e) {
            System.out.println(e.getMessage());
            i = 5;
            return i;// catch了異常之後會在此處返回i的值
        } finally {
            // finally中的程式碼一定會執行
            System.out.println("執行finally~~~");
            i = 6666;// 此處重新給i賦值
            System.out.println("finally 塊中的值:  "+i);
        }
    }
}

執行結果:
1,沒有異常,返回try塊中的值.
2,發生異常,返回catch中的值.
在這裡插入圖片描述
return在catch{}塊裡面和在try{}catch{}finally{}程式碼塊外面:

public class DemoTest {
    public static void main(String[] args) {
        int num = getNum();
        System.out.println("執行結果:   " +num);
    }

    public static int getNum() {
        int i;
        try {
            i = 8;
            System.out.println("try塊中的i的值:  "+i);
            int a = 90 / 0;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            i = 5;
            return i;// catch了異常之後會在此處返回i的值
        } finally {
            // finally中的程式碼一定會執行
            System.out.println("執行finally~~~");
            i = 6666;// 此處重新給i賦值
            System.out.println("finally 塊中的值:  "+i);
        }
        return i;// 沒有異常返回此處的值
    }
}

執行結果:
1,catch住異常之後返回catch{}塊中的值.
2,沒有異常不會執行catch{}塊中的程式碼,會執行到最後,返回最後的值.

總結:
1,只要finally{}塊中有return則一定會返回finally{}塊中的值.
2,catch{}塊中有return和在finally{}程式碼塊後面有return,執行結果catch住異常之後會直接返回catch{}中的值,沒有異常的話會執行最後返回最後的值.