Java中的try-catch-finally

我们平常所说的try-catch,throw均针对可查异常。
关于异常分类,请查看Java中的异常

一旦某个catch语句捕获到异常,将进入异常的处理代码,直到处理结束,整个try-catch语句结束,后面的其他的catch即使有异常也无法匹配进入。

另一个关于执行顺序的例子如下:

public boolean test1(){
        boolean b = true;
        try {
            System.out.println("in try");
            return b;
        } finally{
            b = false;
            System.out.println("in finally , b:"+b);

        }
    }
public int test2(){
        int b = 0;
        try {
            throw new Exception();
        } catch (Exception e) {
            ++b;
            System.out.println("in catch , b:"+b);
            return b;
        }
        finally{
            ++b;
            System.out.println("in finally, b:"+b);
            //return b;
        }
    }

test1输出结果:

in try
in finally , b:false
返回true

test2输出结果:

1
2
返回1

test2原因:当异常抛出,进入catch,++b,此时b为2。在return之前,由于存在finally,因此先进入finally,++b,此时b为3,但是,对于要返回的值b,在进入finally之前,jvm复制一个b保存在catch的return之前,然后另一个b进入finally被修改。最后从finally出来,继续走return,这是返回的依然是之前保留的b。
注意,只有走到return的时候才会进入finally,因此只有return的变量才会有这样的现象。

同理适用于test1。

总结:

1.不管是否异常,finally块中的语句都会执行;
2.当try或catch块中有return语句时,finally块中的语句仍会执行;
3.finally块中的语句是在函数返回前执行的,但函数返回值是在finally块中语句执行前确定的;

附加:一般finally中不建议写return语句,虽然不会报错,但是很不安全。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值