有Return情况下的try catch finally执行顺序

本文详细解析了Java中try-catch-finally语句的执行流程,特别是return语句在不同位置时的行为,以及finally块如何影响程序执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情况一:try{} catch(){} finally{} return;
程序按正常顺序执行。

情况二:try{return} catch(){} finally{} return;
程序先执行try块中return之前的代码,再执行finally块中的代码,最后执行try块中的return。需要注意的是finally块中的代码无法影响try块中的return值,比如说:

    private int i;

    private int test() {
        try {
            i++;
            return i;
        } catch (Exception e) {
            e.printStackTrace();
            return i;
        } finally {
            i++;
        }
    }

即使在final块中执行了i++,但并不会影响try块中的返回值,即test方法返回1,但此时i=2。

情况三:try{ return } catch(){} finally{return}
程序执行try块中return之前(包括return语句中的表达式运算)代码,再执行finally块,因为finally块中有return所以提前退出,而不会执行try块中return。编译器把finally中的return实现为一个warning。

除此之外,在catch块中return以及有异常的情况下,也是同样的道理。

总结
任何执行try块或者catch块中的return语句之前,都会先执行finally语句, 如果finally中有return语句,那么就直接return了,不去执行try 块或者catch块中的return;如果finally块没有return语句,finally块是无法影响try块或者catch块中的return值的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值