2016-06-08 69 views
0

所以我只是在Java中學習異常,我正在看一個例子,但它可能是錯誤的,或者我仍然不理解它。這個例外的例子不對嗎?

下面的代碼:

command1; 
try { 
    command2; 
    command3; 
    try { 
     command4; 
     command5; 
    } catch (MyException e) { command6; } 
    command7; 
} catch (IOException e) { 
    command8; 
} catch (OwnException e) { 
    command9; 
} finally { 
    command10; 
} 
command11; 

然後它寫下來哪些命令將在不同情況下運行,但command7幾乎從未運行,只在一個場景中,如果command4期間發生MyException。

這沒錯?我只是在學習,所以我有可能在這裏錯了,但老師的筆記也有可能是錯誤的,如果command6之後的command7在command7之後,這不是唯一的嗎?因此,command6和command7應該在一個catch塊中解釋爲什麼command7永遠不會執行,只有在這種情況下(我猜如果在command5期間發生MyException但它不會執行每個場景都會在註釋中執行) 。


+4

您是對的,而且您的老師錯了。但解決這個問題的最好方法是自己運行它。它會比寫一個SO問題更快:) – sstan

+0

as @sstan said,use ide(or ideone.com)and play with the thing,you can then see it it with your own eyes;) – 2016-06-08 16:52:32

+2

「但command7是幾乎從不運行,只有在一種情況下,如果在command4期間出現MyException「。這並非完全正確。如果在command4和command5期間沒有遇到異常,命令7也會運行。在command6之後的catch塊內不是command7有目的。 – Jimmy

回答

2

command7;應該運行每次除非command2;command3;或潛在command6;導致IOExceptionOwnException。顯然command7;將不會運行,如果程序崩潰的東西沒有顯示,但除了應該沒有辦法繞過它。如果command11;運行且command8;command9;均未運行,則command7;應已運行。如果您按照上述說明移動支架,則command5;也可能會觸發MyException,這將運行6和7.