异常处理中的return问题

异常处理中的return问题

先上结论:try中return语句是先于finally块的执行的。

首先我们在try中添加return语句,然后在finally中对return的值进行修改。

public class Test {
    public static void main(String[] args) {
        System.out.println("函数返回结果  " + test());
    }
    public static int test(){
        int x = 999;
        try {
            System.out.println("try块内的x  " + x);
            return x;
        } finally {
            System.out.println("finally块:");
            ++x;
            System.out.println("finally块内的x  " + x);
        }
    }
}

运行结果:
在这里插入图片描述

从结果顺序可以看出,在执行try中的语句时,当执行到return时,程序会将将要返回的结果暂时存储在该方法栈帧的局部变量中,然后执行finally语句,当程序运行完finally块后,才返回到return代码,将之前存储的返回值取出输出。
因此,finally中对x的改变,不会影响返回结果

而当我们在finally中添加return语句时

public class Test {
    public static void main(String[] args) {
        System.out.println("函数返回结果  " + test());
    }
    public static int test(){
        int x = 999;
        try {
            System.out.println("try块内的x  " + x);
            return x;
        } finally {
            System.out.println("finally块:");
            ++x;
            System.out.println("finally块内的x  " + x);
            return x;
        }
    }
}


执行结果为
在这里插入图片描述
由此可见,try中return语句确实是先于finally块的执行的。

不过一般不建议在finally中写return语句,finally块存在的主要目的还是对try块内打开的资源进行回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值