本節書摘來華章計算機《資料結構與抽象: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塊永遠不會執行:

按照這個次序,任何i/o異常都将被第一個catch塊所捕獲。因為filenotfoundexception派生于ioexception,是以filenotfoundexception異常是ioexception異常的一種,将與第一個catch塊的參數相比對。幸運的是,編譯程式可能對這個次序給出警告資訊。
好的catch塊次序。正确的次序是将多個具體異常放在其祖先類的前面,如下所示:
異常。
雖然在try塊或catch塊中再嵌套try-catch塊是合法的,但應該盡可能地避免這樣做。先看看能不能用不同的邏輯來組織代碼以避免嵌套。如果不行,将内層塊移到在外層塊中調用的新方法中。
如果必須嵌套try-catch塊,則可遵循以下指南。當一個catch塊出現在另一個catch塊中時,它們必須使用不同的辨別符表示各自的參數。如果計劃在try塊内嵌套try-catch塊,那麼若外層catch塊處理了相關的異常,則可以忽略内層的catch塊。這種情形下,内層try塊抛出的異常被外層try塊捕獲。