當然,異常應該在您認爲合適的適當級別進行處理。假設您不知道如何處理checked異常,並將其包裝在適當的自定義未經檢查的異常中,以傳播到最高級別(假定您不處理該包裝的異常以及某些介質中的其他可能的未經檢查的異常將原始異常發生的級別(因爲你不想或不知道如何)級別分開)。更進一步,所有未處理的異常(未經檢查和檢查,未經檢查包裝)達到頂層(主要方法,webapp控制器等);當然我應該做點什麼。我想要做的就是通過使用日誌條目通知開發人員某些錯誤,並告知用戶他的請求無法正確服務(根據適用於該例外的消息使用不同的消息)。要做到這一點,我使用捕獲塊RuntimeException
(如果它捕獲的不是自定義的未經檢查的異常,我會向用戶發送「發生嚴重問題」或類似的消息;這種非自定義未經檢查的異常的概率將被緩存爲大於零,並且你必須進行溝通)。一些文章(first,second)建議不要通過catch塊中的超類型捕獲子類的實例(或者它只與檢查的異常有關?)。如果我在catch塊中使用了準確的異常類型,我會錯過一些未經檢查的異常,並且應用程序會崩潰(當然,在那些執行日誌記錄和通知用戶的catch塊中會有重複的代碼片斷)。舉個例子,我可以提供在JSP轉換階段建造和使用超類型趕上那超的子類的實例片斷頂層的異常處理
// some code
try {
// body of translated JSP here...
} catch (Exception e) {
out.clear();
pageContext.handlePageException(e);
}
// some code
我的問題:是這個概念是正確的catch塊使用RuntimeException
在頂層向開發者彙報所有問題並向用戶通報所有發生的問題?當然,在這種情況下,異常處理只是通知開發人員和用戶發生問題,並且沒有恢復策略。也許很難將這個概念稱爲異常處理。請糾正我,我欣賞關於這個概念的任何想法。
感謝您的回答。你建議不要推遲處理檢查到的頂級異常(儘快完成(發送消息,創建日誌條目等)),我同意。但是我應該如何處理髮生意外的未經檢查的異常(NullPointerException等)?我同意這些未經檢查的異常,因爲我的編碼和恢復是不可能的;但是如果我沒有在頂層捕獲這些異常,應用程序將崩潰,這種情況比我發現這些異常並提供消息時更糟糕 – stovfl
You可以實現您自己的[UncaughtExceptionHandler](http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.html),並使其記錄異常跟蹤,顯示錯誤消息給用戶,然後關閉應用程序。 – Laf
感謝您的回答和努力 – stovfl