首页 > 代码库 > try catch finally 块里都有return

try catch finally 块里都有return

在try的括号里面有return一个值,那在哪里执行finally里的代码?

A:不执行finally代码

B:return前执行

C:return后执行

答案:B

程序在走到try和catch的return之前会去检查finally,将return 后面的结果保存到本地变量表中,然后“先执行finally,再执行try或catch的return”.

下面一个例子:

如果在try里面返回的是一个保存了值的变量,即:return a;,finally块里面修改了a 的值,那么请看上面的红字部分。

public class Test{
    public static int a(){
        int a = 0;
        try{
            a = 1;
            return a;
        } catch (Exception e) {
            a = 2;
            return a;
        } finally{
            a = 3;
        }
    }

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

最终结果输出 1。

如果在执行finally块里面遇见return ,则优先执行finally里面的return。

例子:

public class Test{
    public static int a(){
        int a = 0;
        try{
            a = 1;
            return a;
        } catch (Exception e) {
            a = 2;
            return a;
        } finally{
            a = 3;
            return a;
        }
    }

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

输出结果为3

 

try catch finally 块里都有return