code7:try-catch-finally关于return的返回问题

第一种情况是;

public class TestException {

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

    public static int getVal() {
        int x = 1;
        int y = 0;
        try {
            x = y + 3;
            System.out.println(x / y);
        } catch (Exception e) {
            x++;
            return x;
        } finally {
            x++;
        }
        return x;
    }
}

说明:

如上图,执行的顺序是从1~7。不会执行最后的那个return语句的。

解说:当程序走到第3步的时候,这时候因为y = 0而抛出异常,这时候程序会递进到catch里面,因为catch里面有return语句,所以此时在catch里面的return语句已经形成了返回路径了:return 4。这时候catch发现finally里面还有可执行的语句,就继续去finally里面进行执行语句,执行完后,因为finally里面没有return语句,所以,当执行完finally语句之后,会再次回到return语句,执行就“return 4”,这时候方法就终结了,该方法最后面的那个return x语句不会再被执行了,并且因为finally里面的x++是对变量x的操作,此时x的值确实是5,但是catch里面的return路径在执行finally里面的x++的时候已经形成了,“return 4“是返回路径,而不是return x。

所以最终的结果就是 输出数字 4。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值