我在面向對象的編程學習對我的考驗,我想知道是否有任何情況下,什麼那麼,考慮下面的代碼:是否有這樣的情況在try finally中終止不會被執行?
try {
do something
} catch (someException e) {
} finally {
do something
}
的finally
塊將不執行?
我在面向對象的編程學習對我的考驗,我想知道是否有任何情況下,什麼那麼,考慮下面的代碼:是否有這樣的情況在try finally中終止不會被執行?
try {
do something
} catch (someException e) {
} finally {
do something
}
的finally
塊將不執行?
是的。如果您崩潰了Java VM,或者通過本機代碼解決問題,導致程序終止,或在try
區塊中無限循環/等待。
這些是避免執行finally
塊的唯一三種情況。
調用System.exit或轉動電腦可能會被視爲「導致程序終止」... :-) – 2010-08-14 17:40:45
@Rasmus Kaj:同意。 – Borealid 2010-08-14 17:52:41
如果在try塊中,你從包含try/catch/finally短語的函數返回,那麼finally塊仍然會執行? – euphoria83 2010-08-14 22:31:00
如果您在try
中致電System.exit(0)
。或者做出讓JVM退出或掛起的東西(如死鎖)。否則 - 不。
儘管JNI可能會。 – 2010-08-14 18:24:39
最終在try-statement完成之前調用的Java語言規範guarantees。
try語句可能無法完成通常的原因,這已在Borealid的答案中列舉。
「最後在try-statement完成之前調用」???應該不是「之前」是「何時」 – 2010-08-14 22:41:08
try- *語句*由try- *塊*,任何catch塊和可選的finally塊組成。 – meriton 2010-08-14 22:43:26
如果控件從try或catch塊中出來,finally塊肯定會被執行。如果你一些如何管理的起停控制出來的這些塊:
寫退出聲明,或者
無限循環等
那麼最終塊將沒有得到執行。 一般我們寫下「清理」的finally塊。
拔插頭應該這樣做。 – PreciousBodilyFluids 2010-08-14 17:24:08
http://thedailywtf.com/Articles/My-Tales.aspx – 2010-08-14 17:26:13