try-catch-finally中,在catch里return了,是否还会执行finally

代码:

public class Demo {
    public static int getNum() {
        int a = 0;
        try {
            a = 1 / 0;
        } catch (Exception e) {
            System.out.println("catch");
            a = 2;
            return a;
        } finally {
            System.out.println("finally");
            a = 3;
        }
        return a;
    }
    public static void main(String[] args) {
        int num = getNum();
        System.out.println(num);
    }
}

输出结果:

catch
finally
2

分析:

1、众所周知,正常情况下finally模块代码肯定会执行,所以可以理解“System.out.println("catch");”、“System.out.println("finally");”的执行。

2、虽然finally执行了,最后的“num”为"2"。因为在catch中”return a“时,已经把"a=2"返回了,即“getNum()”已经有返回值了此时虽然还会执行finally模块,却是在返回结果后把a的值改成了"3"。

 

posted @ 2022-06-17 14:35  请别耽误我写BUG  阅读(290)  评论(0编辑  收藏  举报