2013-03-06 88 views
2

我有一個關於java中錯誤處理的查詢。假設一個庫有幾個錯誤代碼。只有一個例外,並且在錯誤代碼的枚舉中包含各種錯誤,這是否是一種很好的做法?Java中的異常和錯誤代碼

更新:在異常內是否有錯誤代碼是一個好習慣?

+3

使每個錯誤都是自己的類型,在捕獲錯誤之後,您必須弄清楚枚舉方法是什麼。 – andre 2013-03-06 16:17:30

+1

我個人會選擇一個帶有公共超類的異常類型層次結構,所以如果你想要捕獲所有異常類型或捕獲所有的異常類型,你可以捕獲所有的catch(ParentException e)' – 2013-03-06 16:19:54

回答

3

不是。您應該使用不同的Exception類型,每種類型的錯誤類型(在合理範圍內,不要創建數百種不同的異常類型!)。

它可以讓你只捕捉你真正想要捕捉的人,而不是處理每個異常來發現發生了什麼。

但是,隨意自定義異常消息來澄清相同類型的幾個異常中的錯誤來源。

simple explanation是明確的。

2

當前的實踐至少有一個基類(IOException)和子類,如FileNotFoundException,UnsupportedEncodingException。在使用方面,可以使用IOException捕獲所有數據。

這允許處理FileNotFound。

另一方面,有許多代碼,比如HTTP響應代碼,你只有一個異常的方法是不合理的。

4

錯誤錯誤代碼是兩個單獨的事情。一個定義發生了什麼,另一個確定錯誤的具體來源。

最好的例子是數據庫相關的異常,其中一個SQL異常包含一個代碼,用於定義導致它的錯誤信息。

通過枚舉或字段使該代碼可訪問是一個設計決策。如果你有一個例外扔你添加一個錯誤代碼,它可以作爲一個兩步的異常處理:

  1. 趕上確定錯誤的
    • 安全
    • 上下文異常
    • 數據庫
    • 處理
    • 解析
    • 無效操作
  2. 檢查異常代碼來確定源
    • 的用戶沒有足夠的權限做什麼,他試圖做
    • 數據庫連接錯誤a
    • 查詢相關的問題
    • 該系統目前超載
    • 沒有找到管理在一定操作

一旦你確定了源代碼並知道它的上下文(例外),你就可以採取相應的行動。恕我直言,層次結構是一種很好的方法,可以在需要時用代碼進行擴展。請記住,如果僅僅爲了表示來源而劃分出10次異常,就會對可維護性和複雜性產生影響。

+0

但事情是,假設方法A調用方法B來獲得一些價值。在B中發生了一些錯誤。因此,標記該錯誤的最佳方式是B引發異常。但A需要將錯誤代碼返回給調用者。如何處理這種情況? – prashanthkvs 2013-03-06 16:42:30

+0

你只需要捕捉A中的異常,並給出它的上下文,將相關的錯誤代碼返回給調用者。 – 2013-03-06 16:52:50

+0

@prashanthkvs究竟是什麼X.L.Ant說。異常處理的另一個重要部分是管理其傳播。如果檢查到異常並且B拋出異常,則A必須抓住它或丟棄它。如果這個例外是一個沒有檢查的例外,那麼你就必須非常有趣。 – Gamb 2013-03-06 17:01:09

2

如果錯誤代碼太多,並且您不希望用戶捕獲並恢復,則可以使用一個嵌入了整數錯誤代碼的Exception類型。如果在編譯時無法確定一組錯誤代碼,那麼您並沒有真正的選擇。