5

我想使用 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 也会由底部块处理吗?

4

3 回答 3

11

不,因为更具体的异常 (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
}
于 2012-07-18T01:55:39.943 回答
5

如果 aNumberFormatException被抛出,它将被第一个捕获,catch第二个catch不会被执行。所有其他例外都属于第二个。

于 2012-07-18T01:55:33.243 回答
-1

试试这个:throw new Exception() NFE中添加。

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 。

于 2012-07-18T05:43:35.283 回答