簡體   English   中英

Java Multi-Catch / Rethrow

[英]Java Multi-Catch/Rethrow

如果我在Java 1.7中使用multi-catch執行以下操作:

catch (ArrayIndexOutOfBoundsException | NullPointerException ex) {
    logger.error("Array out of bounds exception in BatchTableRow constructor: data was: table = " +
            schema.toString() + ", data: " + sourceRow.toString(), ex);
    throw ex;
}

重新拋出的異常是否會保留最初進入catch子句的異常類型? 如果我捕獲3種異常(包括基本“異常”類)會怎樣 - 它是否始終保持列表中最具體的異常?

重新拋出的異常是否會保留最初進入catch子句的異常類型?

是的 - 它將重新拋出完全相同的異常對象。 您需要區分ex編譯時類型(實際上是聲明類型的上限)和ex的值的執行時類型,它是對特定對象的引用。 對象的類型不會因為您捕獲到異常而改變。

重新拋出的異常是否會保留最初進入catch子句的異常類型?

重新拋出的異常將保持自己的異常類型無關緊要,其中指定了異常類型,使其進入catch子句。

比如說,您已經使用Throwable指定的catch塊捕獲了一個ArrayIndexOutOfBoundsException異常。 現在,即使您通過Throwable 引用重新拋出此異常,您也可以再次使用ArrayIndexOutOfBoundsException (或其任何超類類型) catch它(在堆棧的更高ArrayIndexOutOfBoundsException ),因為異常對象本身永遠不會丟失其類型

只是你正在使用不同類型的異常引用 (取決於你如何定義catch塊)來指向同一個異常對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM