try括号里有return语句, finally执行顺序

 return 可以当作终止语句,常用它来结束当前方法,并返回一个值给调用方法。然后结束该方法不执行return下面的语句。

finally :无论try语句发生了什么,无论抛出异常还是正常执行。finally语句都会执行。(正常情况下)

问题:在try语句里使用return后,finally是否会执行?

如果执行,那么执行顺序是怎么执行的?

答案在底下

 public static void main(String[] args) {
        System.out.println("return value : " + text());
    }

    public static int text() {
        int i = 1;
        try {
            return i;
        } finally {
    System.out.println("It is in final chunk.");
            i++;
        }
    }
//A.It is in final chunk.
//  return value : 1

//B.It is in final chunk.
//  return value : 2

//C.return value : 1
//  It is in final chunk.

//D.return value : 2
//  It is in final chunk.
finally块总是在try块退出时执行。
这确保了即使发生意外异常也会执行finally块。
但finally不仅仅用于异常处理——它允许程序员避免因return、continue或break而意外绕过清理代码。
将清理代码放在finally块中始终是一个很好的实践,即使在预期没有异常的情况下也是如此。
注意:如果JVM在执行try或catch代码时退出,那么finally块可能不会执行。比如出现了异常,虚拟机被终止了等...
同样,如果执行try或catch代码的线程被中断或终止,那么finally块可能不会执行,即使应用程序作为一个整体继续执行。
 public static void main(String[] args) {
        int k = test();
        System.out.println(k);
    }

    public static int test(){
        int a = 0;
        int i = 1;
        try{
            a = a++;
            return a;
        }
        finally{
            System.out.println("It is in final chunk.");
            a = i++;
            return a;
        }
}
//A.It is in final chunk.
//  0

//B.It is in final chunk.
//  1

//C.It is in final chunk.
//  2
//C.It is in final chunk.
//  3
如果try子句执行一个return,编译后的代码会执行以下操作:
1. 在局部变量中保存返回值(如果有的话)。
2. 执行jsr则在finally执行语句的代码。
3.执行finally语句的代码返回时,返回保存在局部变量中的值。

小结:在try语句里使用return后,finally会执行。return返回的值会存入栈中,执行完finally将值返回。return中使用++自增时要++a不能a++,不然return获取的值是a不会进行++,只有++a才会有效。如果finally中也有return,根据先入后出原则,try中的return不会输出,输出的时finally。

答案:A       B

(如有不足,请多多指教!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值