码迷,mamicode.com
首页 > 其他好文 > 详细

try catch finally 块里都有return

时间:2016-11-27 20:09:32      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:部分   cep   ret   stat   catch   final   本地   遇见   void   

在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

标签:部分   cep   ret   stat   catch   final   本地   遇见   void   

原文地址:http://www.cnblogs.com/zhuozhuo/p/6106984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!