A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hacker◊紫猫 中级黑马   /  2014-10-7 21:43  /  1061 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

假如在catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,是在return前,还是return后?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 楼主看视频时,还需仔细。

查看全部评分

3 个回复

倒序浏览
这个会执行的,在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前执行

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 clevergump 于 2014-10-7 22:27 编辑

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

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
finally.   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马