異常鏈
此條目需要精通或熟悉相關主題的編者參與及協助編輯。 (2015年3月16日) |
異常鏈是一種面向對象編程技術,指將捕獲的異常包裝進一個新的異常中並重新拋出的異常處理方式。原異常被保存為新異常的一個屬性(比如cause)。這個想法是指一個方法應該拋出定義在相同的抽象層次上的異常,但不會丟棄更低層次的信息。
比如,播放視頻文件的方法可能捕獲讀取文件過程中的異常,將其包裝在新拋出的播放視頻文件的異常中。用戶界面部分不需要知道讀取字節塊、 eof() 調用或其他操作時發生的錯誤,這是意外的文件結尾、讀取錯誤或者其他的錯誤:用戶界面只需要從 cause 屬性中提取出異常信息。用戶界面層會有自身一系列的異常。若對 cause 感興趣,可以在調試期間、或在適當的日誌中查看異常的堆疊跟蹤信息( stack track )。
Java 中 受控異常(Checked exceptions) 特別強調了拋出正確類型的異常,從 Java 1.4版本開始,幾乎所有的異常都支持異常鏈。
在運行時環境,比如 Java 或 .Net 中,都有工具連接到運行時引擎;每當感興趣的異常發生,這些工具就記錄下內存中的調試信息以及拋出異常的時間(棧和堆上的值)。這些工具提供異常截取(Exception Interception)功能,它們為生產環境、測試環境、開發環境中的Java程序中出現的的異常提供了root-cause信息。
參考連結
- Exceptional practices by Brian Goetz at javaworld.com
- Chained exceptions (頁面存檔備份,存於互聯網檔案館) - Sun's Java tutorial