try{}里有return语句,那么后面的finally{}里的代码是否会执行,什么时候被执行

面试题:try{}里有return语句,那么后面的finally{}里的代码是否会执行,什么时候被执行?

答:会执行,在方法返回调用者前执行


注意:finally只能用在try/catch语句中,并且在try和catch执行完会立即执行,为了验证这点,见如下代码

public static void main(String[] args) {
   System.out.println(methodD());
}
public static int methodD(){
   int i = 1;
   try {
      return i;
   } catch (Exception e) {
      return i;
   } finally {
      System.out.println("finally exe");
      i=2;
   }
}
此时输出为:

finally exe
1

说明虽然try里面进行了return,但是finally还是在return之前执行了,但是并没有修改return的值,输出的是1

public static void main(String[] args) {
   System.out.println(methodD());
}
public static int methodD(){
   int i = 1;
   try {
   } catch (Exception e) {
      return i;
   } finally {
      System.out.println("finally exe");
      i=2;
   }
   return i;
}
此时输出为:

finally exe
2

finally同样执行了,同时也修改了return的值 ,说明finally实际上是在try/catch执行完就会立刻执行,如果try/catch中有return,会把return的数据暂时存储,执行完finally后再继续返回return的值,此时return的值不会被覆盖

测试环境:java8

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值