我用这个例子想出了边学习边模拟考试OCPJP认证,
(从http://www.certpal.com 1.6版考试部分3,流量控制,题号8)为什么不会的主要方法捕获从catch块uncatched例外
public class Oak
{
public static void main(String args[])
{
try
{
Integer i =null;
i.toString();
}
catch (Exception e)
{
try
{
System.out.println("One ");
Integer i =null;
i.toString();
}
catch (Exception x)
{
System.out.println("Two ");
Integer i =null;
i.toString();
}
finally
{
System.out.println("Three ");
Integer i =null;
i.toString();
}
}
finally
{
System.out.println("Four ");
}
}
}
我充分认识到,finally块总是执行,除非有一个System.exit()的,所以我跟踪的方案,并决定这将有像线程这
一两个异常输出“main”java.lang.NullPointerExceptio ñ三个异常线程“main”显示java.lang.NullPointerException四
然而,事实证明,正确的输出是(根据网站和Eclipse调试)
一二三四异常的线程“主”java.lang.NullPointerException
我不明白的是,在哪里发生的catch块与“两个”的异常去?
下面没有catch块,它不应该被主线程抛出吗?因为它没有抓住?
好的,我现在试图理解你的复杂解释:)你可以把它放在一个小的片段? –
@CengizCan:那么你已经得到*代码,它显示了一切......如果抛出一个异常但是你的finally块引发异常,那么第一个异常就会丢失。 –
明白了。谢谢。 –