2010-08-19 12 views
1

如果您有:基本的Java問題:拋出一個異常到後來的catch子句?

catch (FooException ex) { 
    throw new BarException (ex); 
} 
catch (BarException ex) { 
    System.out.println("hi"); 
} 

...和第一catch子句被觸發(即FooExcepetion已經發生), 新的聯合國BarException立即得到通過隨後的「捕獲」子句捕獲?

或者說是新的BarException泛起一層延續堆棧?

我意識到這是一個基本問題。 :)

+0

不確定「延續堆棧」是否是正確的術語。我打算說「調用堆棧」,但是try/catch塊當然可以任意嵌套,因此我們不一定要在這裏處理一堆方法調用。 – 2010-08-19 20:42:06

+0

爲什麼社區wiki? – 2010-08-19 20:46:16

+0

趕上錯誤點擊...:/ – 2010-08-19 20:47:47

回答

4

它沒有被第二個catch子句捕獲,沒有。

列表中的每個catch子句嘗試,看它是否匹配。第一個匹配的是唯一運行的代碼,然後代碼轉到finally子句。

的這另一個結果是,如果您有:

try { 
    throw SubTypeOfException(...); 
} catch(Exception e) { 
    ... block 1 ... 
} catch(SubTypeOfException e) { 
    ... block 2 ... 
} 

然後塊1將運行只有一個,即使塊2會匹配。只評估第一個匹配的catch子句。

+0

是的,我知道這一點 - 即你應該總是以異常特異性的降序排列你的catch子句。 我渴望的Java 7的捕撈(ExceptionType1 | ExceptionType2前)語法.... – 2010-08-19 20:47:16

+0

事實上,這將是一個很好的補充。 – RHSeeger 2010-08-19 21:13:17

+0

@Aaron F.哇!我等不及了! – 2010-08-19 21:22:48

2

它拋出一個級別。

你需要另一個try // catch塊。