2010-08-14 42 views
13

我在面向對象的編程學習對我的考驗,我想知道是否有任何情況下,什麼那麼,考慮下面的代碼:是否有這樣的情況在try finally中終止不會被執行?

try { 
    do something 
} catch (someException e) { 

} finally { 
    do something 
} 

finally塊將不執行?

+13

拔插頭應該這樣做。 – PreciousBodilyFluids 2010-08-14 17:24:08

+5

http://thedailywtf.com/Articles/My-Tales.aspx – 2010-08-14 17:26:13

回答

17

是的。如果您崩潰了Java VM,或者通過本機代碼解決問題,導致程序終止,或在try區塊中無限循環/等待。

這些是避免執行finally塊的唯一三種情況。

+3

調用System.exit或轉動電腦可能會被視爲「導致程序終止」... :-) – 2010-08-14 17:40:45

+0

@Rasmus Kaj:同意。 – Borealid 2010-08-14 17:52:41

+0

如果在try塊中,你從包含try/catch/finally短語的函數返回,那麼finally塊仍然會執行? – euphoria83 2010-08-14 22:31:00

5

如果您在try中致電System.exit(0)。或者做出讓JVM退出或掛起的東西(如死鎖)。否則 - 不。

+0

儘管JNI可能會。 – 2010-08-14 18:24:39

2

最終在try-statement完成之前調用的Java語言規範guarantees

try語句可能無法完成通常的原因,這已在Borealid的答案中列舉。

+1

「最後在try-statement完成之前調用」???應該不是「之前」是「何時」 – 2010-08-14 22:41:08

+2

try- *語句*由try- *塊*,任何catch塊和可選的finally塊組成。 – meriton 2010-08-14 22:43:26

0

如果控件從try或catch塊中出來,finally塊肯定會被執行。如果你一些如何管理的起停控制出來的這些塊:

寫退出聲明
  • ,或者

  • 無限循環等

那麼最終塊將沒有得到執行。 一般我們寫下「清理」的finally塊。

相關問題