當try或catch塊中斷時finally塊不執行什麼時候執行finally塊?該文檔說「如果執行try或catch代碼的線程被中斷或終止,即使應用程序整體繼續,finally塊也可能不會執行。」有人可以舉個例子說明這種情況嗎?try或catch塊中斷時finally塊不執行
4
A
回答
8
可以找到很好的答案here。
除了System.exit()
,如果JVM因某種原因崩潰(例如try
塊中的死循環),finally塊將不會運行。
至於線程本身,僅當它正在使用的stop()
方法(或不suspend()
resume()
)將finally
塊不執行停止。對interrupt()
的調用仍將導致finally
塊正在執行。
另外值得一提的是,由於在finally
塊中的任何return
聲明將覆蓋任何回報或異常的try
/catch
塊拋出,程序行爲很快就會變得不穩定,難以調試,如果這發生在你身上。沒有什麼值得采取防範措施的(因爲它只發生在極其罕見的情況下),但值得注意,以便在發生時能夠識別它。
7
使finally
不執行的唯一合法途徑是調用System.exit
或Runtime.halt
在try
或catch
1
突然結束該應用程序之前,例如
System.exit();
即使在finally
塊(例如,在塊try
)的返回將在finally
之後執行。
1
這是指(大部分)正常Java執行範圍外的事情。
如果你的線程(成功)調用在
try
塊或catch
塊System.exit()
,該呼叫在JLS使用的感覺不會「終結」。同樣的事情發生,如果另一個線程調用System.exit()
。在這種情況下,JVM 只是運行關閉掛鉤。如果JVM(硬盤)崩潰,所有Java活動立即停止。
如果操作系統(硬)殺死了JVM進程,所有Java活動立即停止。
如果電源CPU芯片熄滅......
相關問題
- 1. 如果`try`或`catch`塊中有`return`,`finally`塊會被執行嗎?
- 2. java中的try-catch-finally塊
- 3. 使用沒有'catch'塊的'try-finally'塊
- 4. Try try-catch-finally
- 5. 如果catch塊包含continue語句,何時執行finally塊?
- 6. try/catch塊中的代碼未執行
- 7. 從try塊跳躍finally塊
- 8. GCD @try @catch @finally
- 9. try catch塊不JS
- 10. try/finally塊問題
- 11. 在try/catch塊之後使用finally塊vs寫入代碼
- 12. try塊不執行
- 13. Regex識別包含在.cs文件中的Try-Catch和Try-Catch finally塊
- 14. try catch塊
- 15. try catch塊
- 16. try-catch塊
- 17. try catch塊宏
- 18. 在try catch塊
- 19. 的try/catch塊
- 20. 組織java代碼時使用try catch finally塊
- 21. 在Java中的try-catch塊中嵌入try-catch塊
- 22. 是否在node.js中同步try-catch-finally塊?
- 23. 變量未在try catch塊中初始化`finally`
- 24. 如何在Java中正確使用try-catch-finally塊?
- 25. 實現try/catch塊
- 26. try catch塊問題
- 27. 瞭解try catch塊
- 28. 的Android try catch塊
- 29. 嵌套try-catch塊?
- 30. try catch塊位置
那麼,有什麼問題嗎? – Caveman42
@RAS是的,並在[最終總是執行在Java?](http://stackoverflow.com/questions/65035/does-finally-always-execute-in-java),我找到了我想知道的。但是,我的意思是不同於這個問題。但是,答案確實存在。 – andy