try catch finally中return的执行顺序

 下面说一下try{ } catch{}中有return的情况 究竟是哪个return起作用的 话不多说 上代码

1 try中有return的情况

//普通方法
public static int hh() {
        int aa = 1;
        try {
            return ++aa;            
        } catch (Exception e) {
            return 111; }
finally { ++aa; System.out.println("hh"+aa); } }
//主方法
public static void main(String[] args) {
        int hh = hh();
        System.out.println("main" + hh);

}

 

 输出结果

hh3 
main2

 

hh3是finally{}的执行结果  输出3 说明try{}中的return 后面的++aa执行了  main2是方法运行完的返回值

说明 finally{}代码块实在return的中间执行  程序先算return 边的运算 然后把运算结果保存 起来 再去运行finally{}中的代码 最后在吧保存的值返回出去

 

2 try和finally中都有return的情况

public static int hh() {
        int aa = 1;
        try {
            return ++aa;            
        } catch (Exception e) {
            return 111;
        } finally {
            ++aa;
            System.out.println("hh"+aa);
            return ++aa;
        }
    }

 

方法改成这样 主方法没变

运行结果

hh3
main4

 

可以看出来 try{}中的return后面的++aa运行了 但是结束方法return是finally{}中的 这样写会有警告 说finally中的代码不能正常完成

这样做是finally{}中的return抢在了try{}中的return之前结束了方法;

 

3 catch和finally中有return

测试结果和try中的一样 也就不写了

 

posted @ 2018-03-15 20:20  菜鸟~风  阅读(183)  评论(0编辑  收藏  举报