void f() throws VeryImportantException { throw new VeryImportantException(); }
void dispose() throws HoHumException { throw new HoHumException(); }
try { f(); } finally { dispose(); }
僅輸出 HoHumException,VeryImportantException 被遮蓋丟失。
finally 中拋出異常會取代傳播中的原始異常,導致關鍵錯誤資訊消失。
C++ 若在析構函數(相當於 finally)中拋出異常且當前已有未處理異常,會直接呼叫 terminate(),強制開發者處理。
finally 僅做清理,勿拋出異常。try-with-resources 並支援 addSuppressed() 保留原始異常。