多捕获异常处理程序中的顺序

Dod*_*odi 3 java exception-handling exception multi-catch

我知道自从Java 7你可以使用multi-catch但是我想知道它的异常顺序是否与之前版本的java一样重要?例如,我把异常,然后SQLExceptionIOException

try {
      // execute code that may throw 1 of the 3 exceptions below.

} catch(Exception | SQLException | IOException e) {   
    logger.log(e);

}
Run Code Online (Sandbox Code Playgroud)

或者我应该这样做?

try {

    // execute code that may throw 1 of the 3 exceptions below.

} catch(SQLException | IOException e) {
    logger.log(e);

} catch(Exception e) {
    logger.severe(e);
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

catch(Exception | SQLException | IOException e)因为Exception已经覆盖了它的子类IOException和单个catch块,所以没有任何意义SQLException.

因此catch(Exception e),如果您希望对所有这些异常类型进行相同的处理,那就足够了.

如果你想要更通用的不同处理Exception,你的第二个代码片段是有意义的,这里两个catch块的顺序很重要,因为你必须首先捕获更具体的异常类型.


Stu*_*ske 0

多重捕获异常类型由“OR”分隔,所以不,顺序并不重要。

\n\n

如果您计划以相同的方式处理所有异常类型,则应该仅使用 multicatch,如果是这种情况,顺序并不重要。

\n\n

编辑:确实,如果类型位于 hi\xc3\xabrarchical 行中,则仅应捕获“替代”(在本例中为通用异常)类型。\n但这与它们的顺序无关。

\n