Try Catch Finally和Return的 关系

情况1: try{} catch(){} finally{} return;

有无异常程序都顺序执行,一定会执行到return 语句,有无异常都输出 15

//有无异常程序都顺序执行    
public static void main(String[] args) {
        System.out.println(val());
    }
    public static int val() {
        int num = 5;
        try {
            num = num / 0;
        } catch (Exception e) {
            num = 10;
        } finally {
            num = 15;
        }
        return num;
    }

情况2: try{ return; }catch(){} finally{} return;

【有异常】

  • try里面的return语句 在出现异常之后,或者return语句出错,直接忽略try中的return语句,顺序执行try(执行到异常),catch,finally,finally后的return语句
  •   try里面的return语句 在出现异常之前,这编译报错,因为访问不到return之后的语句

【无异常】

  • 会执行return语句,把return语句中的保存下来,执行finally块中的语句,finally之后的return不会执行,然后程序返回try块中的return,返回开始保存的值,finally改变的是当前方法的变量,返回的是保存的值,下例返回的是5 

情况3:  try{ } catch(){return;} finally{} return;

【有异常】

  • 与情况2中无异常相同,返回保存的值,下例返回10,finally块之后的return不会执行

 【无异常】

  • 无异常肯定catch块不执行,程序顺序执行try finally ,finally之后,上例无异常返回15

情况4: try{ return; }catch(){} finally{return;}

【有异常】

  • 程序顺序执行,try块(到异常),catch块,finally块,finally块有return,后面不能有return idea编译报错,因为根本执行不到,finally覆盖前面return,即使try中的return保存了值,下返回15

        下例返回 依次打印 1 3 2 

         

         

【无异常】

  • 和上一致,就是catch块不执行,也是覆盖,返回15

情况5: try{} catch(){return;}finally{return;}

【有无异常】

  • 和情况4一致,finally覆盖前面,都返回15

情况6: try{ return;}catch(){return;} finally{return;}

【有无异常】

  • 和情况4一致,finally覆盖前面,都返回15
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值