try{}catch{}finally{}代码块中包含return时会得到什么结果?

  Java中return 的作用是直接结束方法的运行,try{}catch{}finally{}代码块中的finally中的代码一定会执行,那么当我们在try{}代码块中或finally{}代码块中加入return之后会发生什么?

       首先在try{}代码块中加入return,代码如下:

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


    public static int tryAddReturnTest() {
        int i = 1;
        try {
            i++;
            System.out.println("try code block, i = " + i);
            return i;
        } catch (Exception e) {
            i++;
            System.out.println("catch  code block i = " + i);
            return i;
        } finally {
            i = 10;
            System.out.println("finally code block i = " + i);
        }
    }
}

运行结果:

try code block, i = 2

finally  code block i = 10

2

为什么会出现这样的结果呢?因为当try中带有return时,会先执行return前的代码,然后暂时保存需要return的信息,再执行finally中的代码,最后再通过return返回之前保存的信息。所以,这里方法返回的值是try中计算后的2,而非finally中计算后的10。

那么当finally{}代码块中也中带有return的时候又会出现什么结果呢?代码如下:

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


    public static int tryFinallyHaveReturnTest() {
        int i = 1;
        try {
            i++;
            System.out.println("try code block, i = " + i);
            return i;
        } catch (Exception e) {
            i++;
            System.out.println("catch  code block i = " + i);
            return i;
        } finally {
            i = 10;
            System.out.println("finally code block i = " + i);
            return i;
        }
    }
}

运行结果:

try code block, i = 2

finally  code block i = 10

10

为什么会出现这样的结果呢?因为当finally中有return的时候,try中的return就会失效,在执行完finally的return之后,直接结束方法。这种写法,编译是可以编译通过的,但是编译器会给予警告,所以不推荐在finally中写return。


总结

1.java的异常处理中,在不抛出异常的情况下,程序执行完try里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有finally的代码块,如果没有finally代码块,整个方法在执行完try代码块后返回相应的值来结束整个方法。

2.如果有finally代码块,不管有没有异常,finally中的代码都会执行。当try、catch中有return时并没有返回运算之后的值,而是把值保存起来,继续执行finally中的代码,不管finally中对该值有没有做改变,返回的值都不会改变,依然返回保存起来的值。finally代码中最好不要包含return,程序会提前退出,也就是说返回的值不是try或catch中的值。

3.finally里的语句只有两种情况下,会不被执行。一种是,在try-catch语句之前,程序就结束了或者挂掉了。第二种是遇到System.exit();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值