閱讀253 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《數據結構與抽象:Java語言描述(原書第4版)》一JI2.2.3 多個catch塊

本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第2章 [美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學  新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。
JI2.2.3 多個catch塊
單個try塊中的語句,可能拋出不同類型異常中的任意一個。例如,假定JI2.2.2節中的try塊中的代碼拋出多個類型的受檢異常。在這個try塊後的catch塊能捕獲IOException類和從IOException類派生的任意類的異常。要捕獲其他類型的異常,可以在try塊後寫多個catch塊。當拋出一個異常時,catch塊出現的次序很重要。按出現的次序,其參數與異常的類型相匹配的第一個catch塊後的語句將被執行。
不好的catch塊次序。例如,下列catch塊的次序不好,因為用於FileNotFoundException的catch塊永遠不會執行:
image
image

按照這個次序,任何I/O異常都將被第一個catch塊所捕獲。因為FileNotFoundException派生於IOException,所以FileNotFoundException異常是IOException異常的一種,將與第一個catch塊的參數相匹配。幸運的是,編譯程序可能對這個次序給出警告信息。
好的catch塊次序。正確的次序是將多個具體異常放在其祖先類的前麵,如下所示:

**程序設計技巧**:因為受檢異常和運行時異常的類都以Exception為祖先,所以避免在catch塊中使用Exception。而是,盡可能地捕獲具體的異常,且先捕獲最具體的

異常。
語法:try-catch塊的語法如下:
image

**程序設計技巧**:如果可能,避免嵌套的try-catch塊

雖然在try塊或catch塊中再嵌套try-catch塊是合法的,但應該盡可能地避免這樣做。先看看能不能用不同的邏輯來組織代碼以避免嵌套。如果不行,將內層塊移到在外層塊中調用的新方法中。
如果必須嵌套try-catch塊,則可遵循以下指南。當一個catch塊出現在另一個catch塊中時,它們必須使用不同的標識符表示各自的參數。如果計劃在try塊內嵌套try-catch塊,那麼若外層catch塊處理了相關的異常,則可以忽略內層的catch塊。這種情形下,內層try塊拋出的異常被外層try塊捕獲。

最後更新:2017-06-26 18:32:03

  上一篇:go  千萬PV是什麼意思?
  下一篇:go  linux係統防火牆iptables命令規則及配置的示例