Joh*_*0te 3 java exception-handling
如果我在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;
}
Run Code Online (Sandbox Code Playgroud)
重新抛出的异常是否会保留最初进入catch子句的异常类型?如果我捕获3种异常(包括基本"异常"类)会怎样 - 它是否始终保持列表中最具体的异常?
重新抛出的异常是否会保留最初进入catch子句的异常类型?
是的 - 它将重新抛出完全相同的异常对象.您需要区分编译时类型ex(实际上是声明类型的上限)和值的执行时类型ex,它是对特定对象的引用.对象的类型不会因为您捕获到异常而改变.
重新抛出的异常是否会保留最初进入catch子句的异常类型?
重新抛出的异常将保持自己的异常类型无关紧要,其中指定了异常类型,使其进入catch子句.
比如说,您已经ArrayIndexOutOfBoundsException使用catch指定的块捕获了异常Throwable.现在,即使您通过Throwable 引用重新抛出此异常,您也可以再次catch使用ArrayIndexOutOfBoundsException(或其任何超类类型)(因为异常对象本身从未丢失其类型).
这只是你使用异常引用的不同类型(取决于你如何定义你的catch块)指向同一个异常对象.