黑马程序员技术交流社区

标题: catch和finally问题 [打印本页]

作者: hacker◊紫猫    时间: 2014-10-7 21:43
标题: catch和finally问题
假如在catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,是在return前,还是return后?

作者: 鲁行    时间: 2014-10-7 22:07
这个会执行的,在return前执行.下面给个代码可以验证:
class Test1
{
        public static void main(String[] args)
        {
                int x = method();
                System.out.println(x);
        }
        public static int method()
        {
                int a = 10;
                int b = 0;

                try
                {
                        System.out.println(a/b);
                }
                catch (ArithmeticException e)
                {
                        System.out.println("除0啦!");
                        return a;
                }
                finally
                {
                        System.out.println("finally");
                }
                return -1;
        }
}
程序运行的结果是:
除0啦!
finally
10
由此可以看出finally是在return前面执行的.
从return关键字可以知道:写在return下面的语句是执行不到的(毕老师视频有讲过),所以finally是在return前执行
作者: clevergump    时间: 2014-10-7 22:22
本帖最后由 clevergump 于 2014-10-7 22:27 编辑

这个问题是毕老师视频里专门强调过的。只有一种情况下,finally代码块才不被执行,就是当catch代码块中有 System.exit(0); 语句的时候。除此之外,finally代码块都会被执行的(包括楼主说的 “catch中有return语句”这种情况,finally也会执行的,优先于return执行)。
作者: yueyazhishang    时间: 2014-10-7 22:57
finally.   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2