Java中的異常傳播是否有任何指導原則?異常傳播指南(Java)
何時向方法簽名添加異常? 例如:如果一個異常只是在缺少必要的程序資源時拋出,並且只能在頂層處理,那麼是否通過使用此異常的所有方法通過使用erring方法的所有方法傳播它?
有沒有什麼好的做法?任何不好的做法?
對不起,如果我含糊不清,但我只是尋找一些關於異常編程風格的(一般)建議。
Java中的異常傳播是否有任何指導原則?異常傳播指南(Java)
何時向方法簽名添加異常? 例如:如果一個異常只是在缺少必要的程序資源時拋出,並且只能在頂層處理,那麼是否通過使用此異常的所有方法通過使用erring方法的所有方法傳播它?
有沒有什麼好的做法?任何不好的做法?
對不起,如果我含糊不清,但我只是尋找一些關於異常編程風格的(一般)建議。
準則,在過去幫了我包括:
你應該儘快處理該方法,但它必須有意義。如果異常無法通過方法拋出,但無法處理,請將其封裝到另一個異常中並拋出此新異常。
關於異常的一個不好的做法是全部抓住它們(它不是口袋妖怪,它是java!),所以請避免catch(Exception e)
或更糟糕的catch(Throwable t)
。
你是什麼意思與「包裝在另一個例外」?爲什麼不重新拋出原始異常? – wen 2010-08-23 20:09:55
@Dennetik,在java中你必須捕獲檢查異常或聲明它們被拋出。它不可避免地導致包裝(或吞嚥,這是一件壞事)。否則,你的拋出列表會變得失去控制,或者碰到一個不允許你拋出檢查異常的接口。 – Yishai 2010-08-23 20:19:37
因爲有時只是重新拋出原始異常沒有任何意義,例如,如果處理到數據庫的連接以獲取實體,並且拋出一個SQLException,那麼您不希望重新拋出SQLException,而是你自己的例外之一,這在你的代碼中是有意義的。 – 2010-08-23 20:22:40
我不同意在重新排除異常時細節丟失。 – 2010-08-23 21:18:38
@Thorbjorn,是的。沒有足夠的咖啡因:-)我已經重寫了最後一節以反映實際意圖。 – 2010-08-23 21:57:17
@VineetReynolds「java.lang.Exception的使用子類(checked異常),當你除了來電處理異常」 - 你的意思是「期待」? – gumkins 2017-07-06 12:54:10