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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马李杰 中级黑马   /  2013-3-29 21:25  /  1855 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚才在网上看到一段代码,发帖子的人说为什么没有打印A,我知道是主函数在运行func()的时候,抛出异常,jvm就会跳出try中的代码,不在执行func()方法后的代码,然后把异常对象当做参数传递给catch,然后执行catch中的代码。那func()方法中的,finally什么时候执行啊,是第一个打印,还是最后打印,解释下原因?是不是太幼稚了这个问题,呵呵

class Test
{
        public static void main(String[] args)
        {
                try
                {
                    func();
                    System.out.println("A");//此处的A为什么没有打印呢
                }
                catch(Exception e)
                {
                    System.out.println("C");
                }
                System.out.println("D");
        }
        public static void func() throws Exception
        {
               try
               {
                   throw new Exception();
               }
               finally
               {
                   System.out.println("B");
               }
        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
finally里面的内容不论是否出现异常,都会在try-catch-finally机制的最后执行

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
不是有道题叫验证finally是在return之前执行的,但finally并不能改变ruturn的返回值!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
finally是一个关闭操作 除非关闭虚拟机 否侧都是会执行的,在try-catch(catch可以没有)-finally的最后执行,但是会在return  之前执行的。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油~

查看全部评分

回复 使用道具 举报
若还有问题,继续追问; 没有的话,请将帖子分类改成【已解决】哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马