黑马程序员技术交流社区

标题: 怪异的程序 [打印本页]

作者: 胡文彬    时间: 2014-3-11 16:44
标题: 怪异的程序

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  为什么?  最重要的是它没有编译失败
作者: 菜小徐    时间: 2014-3-11 16:47
本帖最后由 菜小徐 于 2014-3-11 16:48 编辑

因为你最后一条输出前少了一个finally,如果没写错答案对的啊。

作者: e.c    时间: 2014-3-11 16:50
func这个函数里把异常已经处理了。所以在main里执行不会有异常了
作者: volvoxc    时间: 2014-3-11 16:51
首先调用func方法,这个方法抛出了一个异常,在这个方法中就抓住了这个异常,输出A,程序继续往下执行,输出A,这时主函数try块里的程序执行结束并没有抛出异常,因为func方法抛出的异常自己处理掉了,所以可以认为主函数try块里并没有异常产生,输出D结束。
作者: 房建斌    时间: 2014-3-11 16:52
本帖最后由 房建斌 于 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。





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