Java中try、catch、finally、return的执行顺序

本文探讨了Java中try、catch、finally语句块中return语句的执行顺序及finally块对return值的影响。通过具体示例代码展示了不同情况下return语句的行为差异。

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

####示例 ####
try、finally中都有return的执行顺序

public class TestReturn {
    private static int i = 1;

    public static void main(String[] args) {
        int i = testRetrun();
        System.out.println("Final-i:" + i);
    }

    private static int testRetrun() {
        try {
            i++;
            System.out.println("try-i:" + i);
            return ++i;
        } catch (Exception e) {
            System.out.println("catch");
        } finally {
            System.out.println("finally-i:" + i);
            i++;
            System.out.println("finally-i:" + i);
            return ++i;
        }
    }
}
打印结果
try-i:2
finally-i:3
finally-i:4
Final-i:5
执行顺序

先执行try代码块,return逻辑执行但不返回,接着执行finally语句,return逻辑执行返回。

try、catch中都有return的执行顺序

private static int testRetrun() {
        try {
            i++;
            System.out.println("try-i:" + i);
            return ++i;
        } catch (Exception e) {
            System.out.println("catch-i:" + i);
            return ++i;
        } finally {
            System.out.println("finally-i:" + i);
            i++;
            System.out.println("finally-i:" + i);
        }
    }

####打印结果

try-i:2
finally-i:3
finally-i:4
Final-i:3

####执行顺序
先执行try代码块,return逻辑执行但不返回,接着执行finally语句,执行完毕后,再通过try代码块中的return返回。

其他情况都是一样的,这里就不做测试了

结论

  1. return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)
  2. finally永远会执行
  • 当finally中有return时,则通过finally中的return结束代码执行
  • 当finally中无retrun时,则执行完finally代码块后再通过try或catch中的return结束代码执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值