哪个更适合异常处理?

1 java exception-handling

我们有5个可能的例外,我们想要处理它们.我应该使用5个不同的捕获或类似:

try {
  //...
}
catch(Exception e) {
 if(e instanceof IOException) 
 else if(e instanceof IllegalStateException)
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Roh*_*ain 8

使用5个不同的catch块肯定比使用instanceof运算符模拟相同的东西更好.只是保持顺序正确(首先是最具体的例外,然后是最后的一般例外):

try {

} catch (IOException exc) { 
    // do something
} catch (IllegalStateException exc) {
    // do something else
} catch (Exception exc) {
    // do something else for all remaining exceptions.
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您对某些异常有类似的处理,并且您已经使用Java 7,则可以利用多捕获块:

try {

} catch (IOException | IllegalStateException exc) { 
    // do something
}
Run Code Online (Sandbox Code Playgroud)

  • @AndrewMartin`instanceof`很少是好事.这里使用不同的`catch`语句允许编译器检测未捕获的异常(除非你用`catch(异常e)`捕获所有异常). (2认同)