12.5.3 丟擲和捕捉多個異常
有時候乙個方法會丟擲多種異常來指示不同型別的問題。如果這些都是受檢異常,必須都列在方法的throws子句中,它們之間以逗號分開。比如:
public void process()throws eofexception, filenotfoundexception
異常處理器必須處理從它的受保護的語句中可能丟擲的所有的受檢異常,因此乙個try語句可以有多個catch塊,如**清單12-11所示。注意每個catch塊中可以用相同的變數名。
**清單12-11 乙個try語句中的多個catch塊
當乙個異常被try塊中的乙個方法呼叫所丟擲時,catch塊以書寫的順序依次檢查異常的型別,直到有乙個匹配為止。所以如果eofexception異常被丟擲,那麼控制就轉移到第乙個catch塊;而如果filenotfoundexception異常被丟擲,控制就轉移到第二個catch塊。一旦某個catch塊執行到最後一句了,接下去就執行在最後乙個catch塊下面的語句。
如果有必要,多型性可以用來避免寫很多catch塊。不過這可能會加大實施型別相關的恢復操作的難度。在**清單12-12中,乙個catch塊可以處理受保護語句中丟擲的任何異常。這是因為異常匹配的過程只是看異常物件是否屬於catch所要捕捉的型別。既然所有的的異常都是exception類的子類,這個catch就會捕捉到任何異常(不論是受檢還是不受檢)。由於匹配過程的特點,在乙個try語句中的各個catch塊的順序是有意義的。某個異常型別的catch不能在它的超型別的catch之後,因為前面的超類的catch塊在子類的catch塊做匹配檢查之前一定會匹配到子類的異常物件。
**清單12-12 在乙個catch塊中捕捉所有的異常
練習12-29 改進在練習12-26和練習12-27中寫的try語句,使得它們在不同的catch塊中處理受檢異常和不受檢異常。
練習12-30 下面的try語句有什麼錯?
trycatch(exception e)
catch(runtimeexception e)
Tomcat發布多個專案丟擲異常
當多個專案部署在同乙個tomcat時,會發生這樣的異常,而在tomcat目錄下的server.xml配置又是正確的。從瀏覽器訪問專案時,出現空白。於是我吾將上下而求索。發現了tomcat部署之web.xml 這個裡面的docbase正好指向的即為專案web inf下面的web.xml中的 conte...
捕獲和丟擲異常
異常處理5個關鍵字 try catch finally throw throws 不捕獲異常 public class test 捕獲異常,finally 可以不要,用於 假設io資源關閉,就會用到。public class test catch arithmeticexception e fina...
oracle plsql 捕獲異常和丟擲異常
在寫oracle儲存過程的時候很多東西放到儲存過程裡面比如一些判斷等,要比在程式邏輯裡面簡單很多,但是也會涉及到捕獲和丟擲一樣的問題。exception when excepttion name1 then when excepttion name2 then when excepttion nam...