回答
該規則應該更好的閱讀:不要處理你不知道如何處理的異常!
如果例如你編寫了一個讀取CSV文件並返回行標記的類,在你的類中可能會出現一些可能拋出IOException的點。你絕對不應該接受它,因爲處理它不是你的責任!您的任務是將字節流轉換爲令牌流,僅此而已。如果有人通過腐敗的流向你,這應該由他來處理,而不是你。
編輯另一個例子:如果你的庫例如達到一個SocketException,並且套接字已經從調用者提供給lib,則傳遞SocketException。如果你的庫只是一個抽象的連接框架,它也可以連接到文件,內存等,並且SocketExceptions不常見,將它們包裝在一個ConnectionException中。
它更加面向對象,隱藏實現細節。
正如約書亞說布洛赫有效的Java:
這是令人不安的,當一個方法 拋出了到 要執行的任務沒有 明顯的連接異常。當 方法通過較低級別的抽象傳播 拋出的異常時,通常會發生這種情況。不僅 這是令人不安的,但它污染 更高層的API與 實施細節。如果在後續版本中更高層 的實現發生變化,則拋出的異常也會更改 ,這可能會破壞現有的 客戶端程序。爲了避免這個問題,高層應該捕獲更低層次的異常,並且在他們的 位置拋出異常,這些異常可能是由更高級別的 抽象解釋的 。
如果你在捕捉它們之後有一些有用的事情,那麼可以捕捉異常。例如,假設您在嘗試進行Web服務調用後獲得IOException
。在某些情況下,捕獲該異常並重試呼叫可能是有意義的。
當你吞下它們而沒有適當地處理它們時,捕捉異常就變成了「壞事」。在這種情況下,你最好拋出異常,並從更高層次處理它,更清楚它的行爲應該是什麼。只有在是有意義的,可以治療
例外應該被捕獲。 這個想法是將異常傳播到應用程序的層,以使用戶或業務邏輯可以對異常採取一些行動。
- 1. 爲什麼Symfony2的不捕捉異常
- 2. 爲什麼我會捕捉異常
- 3. 爲什麼它不能在C++中捕捉異常?
- 4. 爲什麼我不會在這裏被迫捕捉異常?
- 5. 捕捉異常,是否和不要
- 6. 捕捉異常的處理是什麼?
- 7. 嘗試捕捉最後不捕捉異常
- 8. 捕捉異常
- 9. 爲什麼不能捕捉到內部異常?
- 10. 爲什麼叮噹4.0不捕捉std異常?
- 11. 爲什麼異常不能正確捕捉?
- 12. 不能捕捉異常
- 13. 不可捕捉異常(PowerShell)
- 14. 不能捕捉到異常
- 15. 不可捕捉的異常?
- 16. set_exception_handler()不捕捉異常
- 17. Oracle不捕捉異常
- 18. C++不捕捉lua異常
- 19. 我如何知道要捕捉什麼異常?
- 20. 爲什麼我應該關心Java中捕捉到的異常?
- 21. 有什麼理由通過價值捕捉異常?
- 22. 捕捉filenotfound異常
- 23. 捕捉異常C#
- 24. 捕捉Javamail異常
- 25. Python捕捉異常
- 26. SignalR捕捉異常
- 27. 捕捉lambda異常
- 28. Android捕捉異常
- 29. C#捕捉異常
- 30. 捕捉int異常
布洛赫並沒有說「不要拋出異常」,他說「拋出適合抽象的異常」。 – 2011-03-12 19:17:08
@Software Monkey:+1,你說的對,一秒鐘閱讀我剛剛舉了一個例子來說明他的說法。 – Daniel 2011-03-12 20:10:24