尝试捕获短路/直通java

时间:2012-07-18 01:53:45

标签: java exception

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

3 个答案:

答案 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