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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-11 16:44  /  1031 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class Test

{        
        public static void func()
        {
                try
                {
                        throw  new Exception();
                }
                catch(Exception e)
                {
                        System.out.println("A");

                }
               

        }
        public static void main(String[] args)
        {
                try
                {
                        func();
                        System.out.println("A");
                }
                catch(Exception e)
                {
                        System.out.println("C");
                }
                System.out.println("D");
        }
}

这个程序的输出结果是AAD  为什么?  最重要的是它没有编译失败

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 菜小徐 于 2014-3-11 16:48 编辑

因为你最后一条输出前少了一个finally,如果没写错答案对的啊。
回复 使用道具 举报
func这个函数里把异常已经处理了。所以在main里执行不会有异常了
回复 使用道具 举报
首先调用func方法,这个方法抛出了一个异常,在这个方法中就抓住了这个异常,输出A,程序继续往下执行,输出A,这时主函数try块里的程序执行结束并没有抛出异常,因为func方法抛出的异常自己处理掉了,所以可以认为主函数try块里并没有异常产生,输出D结束。
回复 使用道具 举报
本帖最后由 房建斌 于 2014-3-11 16:55 编辑

在func();中你抛出一个异常然后你又给catch了,所以调用func()方法,会先执行func()try里面的代码,抛出了异常,然后执行了catch里面的代码,输出A。然后执行了main方法中输出A,由于func()没有向外面抛出异常,所以main方法的catch没有执行,直接执行了System.out.println("D");输出D。
所以结果是AAD

程序的关键在于在func()中你throw new Exception()代表此处有异常,而对待此异常的方法,要么是在func()声明func() throws Exception,要么就是给try catch起来,这里你用了try catch。

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

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