我们有5种可能的例外,我们想要处理它们。我应该使用5种不同的捕获物 那样:
try {
//...
}
catch(Exception e) {
if(e instanceof IOException)
else if(e instanceof IllegalStateException)
}
谢谢。
答案 0 :(得分: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.
}
此外,如果您对某些例外有类似处理,并且您已经使用Java 7,则可以利用多捕获块:
try {
} catch (IOException | IllegalStateException exc) {
// do something
}
答案 1 :(得分:2)
如果您抓住Exception
,然后有if-else if
的级联,则会冒吞咽任何不匹配的异常的风险。编译器不会强制执行结束else throw e
子句。
此外,一旦你将其作为Exception
抓住,如果你的方法没有声明throws Exception
,那么你甚至不能再把它扔掉,这是不应该的。
总而言之,除非:
,否则请遵守标准习语答案 2 :(得分:1)
如果针对两个或更多异常执行的操作相似,则将它们组合在一起。但如果你这样做,那就做对了:
try {
// foo
} catch (ExceptionClass1 | ExceptionClass2 | ExceptionClass3 e) {
// error foo
}
有关多个异常处理的详细信息,请参阅:Javadoc
答案 3 :(得分:0)
只需要使用多个catch而不是使用
的实例Java支持多个catch语句有一个原因,从Java 7开始,你甚至可以使用' multicatch'像这样:
try {
...
}
catch (IOException | OtherException | MyException e) {
...
}
更多信息: -
http://tutorials.jenkov.com/java-exception-handling/catching-multiple-exceptions.html
答案 4 :(得分:0)
您应该明确使用catch{}
块,而不是手动模拟异常处理机制。
较新版本的Java允许您在一个catch{}
块中合并多个异常:
try {
// ...
} catch (E1 | E2 | E3 e) {
// handle e
}
答案 5 :(得分:0)
最好使用具有不同异常变量的更多catch块。
完全像你问题中的例子。
答案 6 :(得分:0)
在Java 7中,我们可以使用如下的try catch块,
try
{
catch(IllegalArgumentException | SecurityException | IllegalAccessException | NoSuchFieldException e)
{
// code goes here
}
}