1. 程式人生 > >try-catch-finally中,如果在catch中return了,finally中的程式碼還會執行麼,原理是什麼?(異常相關四)

try-catch-finally中,如果在catch中return了,finally中的程式碼還會執行麼,原理是什麼?(異常相關四)

答案:會執行,在return 前執行

/*
 * java面試題20--如果catch裡面有return語句,finally裡面的程式碼還會執行嗎?
 */
public class FinallyDemo2 {
    public static void main(String[] args) {
        System.out.println(getInt());
    }

    public static int getInt() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
            /*
             * return a 在程式執行到這一步的時候,這裡不是return a 而是 return 30;這個返回路徑就形成了
             * 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40
             * 再次回到以前的路徑,繼續走return 30,形成返回路徑之後,這裡的a就不是a變量了,而是常量30
             */
        } finally {
            a = 40;
        }

//      return a;
    }
}

執行結果:30

package com.java_02;

/*
 * java面試題20--如果catch裡面有return語句,finally裡面的程式碼還會執行嗎?
 */
public class FinallyDemo2 {
    public static void main(String[] args) {
        System.out.println(getInt());
    }

    public static int getInt() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
            /*
             * return a 在程式執行到這一步的時候,這裡不是return a 而是 return 30;這個返回路徑就形成了
             * 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40
             * 再次回到以前的路徑,繼續走return 30,形成返回路徑之後,這裡的a就不是a變量了,而是常量30
             */
        } finally {
            a = 40;
            return a; //如果這樣,就又重新形成了一條返回路徑,由於只能通過1個return返回,所以這裡直接返回40
        }

//      return a;
    }
}

 執行結果:40