黑马程序员技术交流社区
标题:
怪异的程序
[打印本页]
作者:
胡文彬
时间:
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