2010-12-16 87 views

回答

10

「效率」在這裏不應該是一個問題。

當您遇到代碼無法處理的情況(您希望調用者執行某些操作)時,會引發異常。當你可以做些什麼的時候(如果你的調用者也應該做些什麼的話,你可能仍然想重新拋出它或另一個異常),你會發現一個異常。

當您決定是否檢查錯誤條件以避免後續異常或僅調用一些代碼並在之後處理異常時,效率可能會很有用。這裏的經驗法則是,例外應該只發生在例外的情況下,因爲它們會產生相當多的運行時間開銷(當它們實際被拋出時,純粹的catch塊沒有成本)。

+0

是否真的有沒有成本,有一個catch塊?我認爲在設置和拆除額外的面向異常的框架時,即使沒有拋出異常,也會有開銷(儘管可能與您的實際代碼相比很小)。 – 2010-12-16 04:50:14

+0

謝謝蒂洛。 – Mudassir 2010-12-16 05:45:55

4

這是一個高度爭議的話題,很多人都有強烈的意見。一些有用的鏈接

http://www.ibm.com/developerworks/java/library/j-jtp05254.html

http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html

最喜歡春天的流行的框架相信只有處理異常的理念,如果你可以做一些關於他們,因此,他們投入更多的運行時異常。這是有道理的,因爲拋出和捕獲檢查異常是添加不必要的代碼。

還有一個問題。在應用程序中的某個時刻,尤其是接近UI界面層(例如Web應用程序的servlet),您需要確保正確處理各種異常並捕獲它們。否則,用戶會看到500錯誤,這絕對不是一個理想的體驗。在某個時候,您想讓用戶瞭解哪裏出了問題。如果它的運行時異常,可能更好的說,未知的錯誤,記錄它併發送郵件給系統管理員跟蹤。

所以是的,只處理您期望的異常,並且可以在整個應用程序中以建設性的方式進行處理。但是,當您接近應用程序的用戶界面層時,請對此規則進行例外。