码迷,mamicode.com
首页 > 编程语言 > 详细

Java中的try-catch-finally

时间:2015-04-22 09:41:39      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:try-catch

我们平常所说的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语句,虽然不会报错,但是很不安全。

Java中的try-catch-finally

标签:try-catch

原文地址:http://blog.csdn.net/langduhualangdu/article/details/45177017

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!