【JAVA】一个方法可否执行两次return?(try、catch、finally学习)

//一个方法可否执行两次return,如果两次return都返回了一个值那么返回哪个值?

public class Solution {
    public static void main(String[] args) {
        System.out.println(fun());
    }

    public static int fun() {
        try {
            System.out.println("执行一次return");
            return 1;
        } catch (Exception e) {
            System.out.println("抛出异常");
        } finally {
            System.out.println("执行第二次return");
            return 2;
        }
    }
}

在上面的代码中执行了两次return,第一次return是在try语句中执行,但是并没有直接返回而是把需要return的值保存了下来然后执行finally语句,在finally语句中又执行了第二次return,这次直接将值返回了所以返回的是第二次执行的值。

这里涉及了try,catch,和finally的执行顺序问题。

首先执行try语句中的代码,如果执行到某一行出现异常则停止执行直接转到catch语句执行,最后不管是否抛出异常都会执行finally语句中的代码

下面的代码输出什么

public class Solution {
    public static void main(String[] args) {
        System.out.println(fun());
    }

    public static int fun() {
        int i = 1;
        try {
            System.out.println("执行return");
            return i++;
        } catch (Exception e) {
            System.out.println("抛出异常");
        } finally {
            i++;
        }
        return i;
    }
}

 在前面提到了try语句中的return是把要return的值保存,而不是保存变量。所以执行finally后仍然返回1。

在这里说一下不执行finally代码块的三种情况。

1、程序没有进入try代码块。

2、进入try代码块但是其中出现了死锁或者死循环。

3、进入try代码块但是其中执行了System.exit()方法。

finally代码块的职责不在于对变量进行赋值等操作,而是清理资源、释放连接、关闭管道流等操作。

相对在finally代码块中赋值,更加危险的做法是在finally块中使用return操作,这样的代码会使返回值变得非常不可控。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值