有一個很好的問題Catch block is not being evaluated when exceptions are thrown from finallys,它討論了在finally塊中引發異常的一些有時意想不到的結果。在finally塊中拋出一個異常是否是不錯的實踐?
我想不出有什麼好的理由說明你爲什麼要在finally塊中拋出一個異常。如果有以前的例外,它總是會丟失。我總是看到最終習慣於以永遠不會拋出異常的方式進行清理。
任何人都可以解釋什麼時候可以在finally塊中拋出異常嗎?
最後拋出的異常將被來自相應的catch塊的來電者所捕獲。但正如祕魯所說,當爲了更安全和更清潔而爲之時,爲什麼還要考慮搞亂事情呢?最後是清理亂糟糟的事情,不要讓它更多。 – Zenwalker
你提到的線程從一個觀點開始,即清理代碼拋出一個異常...不是通過'throw'的方式,而是違背開發人員的期望......所以有一個問題'*是否要從finally塊中拋出異常,並在*'根本?我想這不是... – horgh
在那原來的帖子http://stackoverflow.com/questions/12150994/catch-block-is-not-being-evaluated-when-exceptions-are-thrown-from-finallys我給出了一個答案,說要將'finally'塊的內容封裝到try..catch中,以避免finally塊中可能出現的異常......我仍然認爲,應該這樣做,如果有任何警告finally塊可能會拋出一個異常 – horgh