try catch finally 块里都有return

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

深入剖析java的try…catch…finally语句

.Net基础面试题

Java——异常

java中的“try - catch -finally”结构中的“finally”都有哪些用途

JAVA异常处理机制

第五周学习总结