我用這個例子想出了邊學習邊模擬考試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塊引發異常,那麼第一個異常就會丟失。 –
明白了。謝謝。 –