我想使用try-catch块来处理两种情况:特定异常和任何其他异常。我可以这样做吗? (例子)
try{
Integer.parseInt(args[1])
}
catch (NumberFormatException e){
// Catch a number format exception and handle the argument as a string
}
catch (Exception e){
// Catch all other exceptions and do something else. In this case
// we may get an IndexOutOfBoundsException.
// We specifically don't want to handle NumberFormatException here
}
NumberFormatException是否也由底部块处理?
答案 0 :(得分:11)
不,因为将在第一个catch中处理更具体的异常(NumberFormatException)。需要注意的是,如果交换缓存,则会出现编译错误,因为您必须在更一般的异常之前指定更具体的异常。
这不是您的情况,但是从Java 7开始,您可以将catch中的异常分组为:
try {
// code that can throw exceptions...
} catch ( Exception1 | Exception2 | ExceptionN exc ) {
// you can handle Exception1, 2 and N in the same way here
} catch ( Exception exc ) {
// here you handle the rest
}
答案 1 :(得分:4)
如果抛出NumberFormatException
,它将被第一个catch
捕获,第二个catch
将不会被执行。所有其他例外都转到第二个。
答案 2 :(得分:0)
试试这个:在 NFE catch中添加throw new Exception()
。
try{
Integer.parseInt(args[1])
}
catch (NumberFormatException e){
// Catch a number format exception and handle the argument as a string
throw new Exception();
}
catch (Exception e){
// Catch all other exceptions and do something else. In this case
// we may get an IndexOutOfBoundsException.
// We specifically don't want to handle NumberFormatException here
}
通过这种方式,您可以在其catch块中处理 NFE 。而在另一个区块中的所有其他。您不需要在第二个块中再次处理 NFE 。