finally无论是否遇到return都会被执行

本文探讨了Java中finally代码块与return语句的交互作用,解析了finally块在不同情况下的执行时机及其对return结果的影响,通过实例代码展示了finally块如何在方法返回前执行,以及在包含return语句时如何改变最终的返回值。

finally中的代码块是无论怎样都会被执行的,那么如果遇到return呢,还会被执行吗?

答案是,会的。

return就意味着要结束方法体了,finally又是无论怎样都会被执行的,所以可以认为finally代码块是在返回之前执行的。

上代码:

public class TestsForAny {

    public static void main(String[] args) {

        System.out.println("result of whenFinallyExecute is:"+whenFinallyExecute());
    }

    public static int whenFinallyExecute() {
        int aNumber = 1;
        try {
            System.out.println("try something");
            return ++aNumber;
        }
        catch (Exception e) {
            aNumber = 10;
            System.out.println("catch something");
        }
        finally {
            ++aNumber;
            System.out.println("final" + "Anum is:" + aNumber);
        }
        System.out.println("last block");
        return aNumber;
    }


}

执行结果:

可以看到,finally在return之前被执行了,但是没有对try代码块中的返回结果产生影响。

那try呐,是什么样子的?

上代码:

public class TestsForAny {

    public static void main(String[] args) {

        System.out.println("result of testTryReturn  is:" + testTryReturn ());
    }

    public static int testTryReturn() {
        int aNumber = 1;
        try {
            System.out.println("try something");
            aNumber = aNumber/0;
            return ++aNumber;
        }
        catch (Exception e) {
            ++aNumber;
            System.out.println("catch something");
            return aNumber;
        }
        finally {
            aNumber = aNumber + 10;
            System.out.println("finally");
        }
    }

}

运行结果:

结果是2,说明catch里面的return是会对最终结果产生影响的。

那如果finally里面也有return呢?

上代码:

public class TestsForAny {

    public static void main(String[] args) {

        System.out.println("result of testFinallyReturn is:" + testFinallyReturn());
    }

    public static int testFinallyReturn() {
        int aNumber = 1;
        try {
            System.out.println("try something");
            aNumber = aNumber/0;
            return ++aNumber;
        }
        catch (Exception e) {
            ++aNumber;
            System.out.println("catch something");
            return aNumber;
        }
        finally {
            aNumber = aNumber + 10;
            System.out.println("finally");
            return aNumber;
        }
    }

}

运行结果:

结果为12,finally里面有return,就可以影响最终结果了、

所以,finally最终总是会被执行,在finally之前遇到return会在先执行finally然后return,并且不会对return结果产生影响。如果在finally之后遇到return或者finally中本身包含return,是可以对结果产生影响的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值