基本的Java问题:向后来的catch子句抛出异常?

时间:2010-08-19 20:40:50

标签: java exception

如果你有:

catch (FooException ex) {
    throw new BarException (ex);
}
catch (BarException ex) {
    System.out.println("hi");
}

...并触发第一个catch子句(即已发生FooExcepetion), 新的BarException是否会立即被后续的“catch”子句捕获?

或者是新的BarException在连续堆栈中抛出一级吗?

我意识到这是一个基本问题。 :)

2 个答案:

答案 0 :(得分:4)

它没有被第二个捕获条款捕获,没有。

尝试列表中的每个catch子句,看它是否匹配。匹配的第一个是唯一运行的,然后代码转到finally子句。

另一个结果是,如果你有:

try {
    throw SubTypeOfException(...);
} catch(Exception e) {
    ... block 1 ...
} catch(SubTypeOfException e) {
    ... block 2 ...
}

然后块1是唯一将运行的块,即使块2匹配也是如此。仅评估第一个匹配的catch子句。

答案 1 :(得分:2)

它被提升了一级。

你需要另一个尝试// catch块。