如果你有:
catch (FooException ex) {
throw new BarException (ex);
}
catch (BarException ex) {
System.out.println("hi");
}
...并触发第一个catch子句(即已发生FooExcepetion), 新的BarException是否会立即被后续的“catch”子句捕获?
或者是新的BarException在连续堆栈中抛出一级吗?
我意识到这是一个基本问题。 :)
答案 0 :(得分:4)
它没有被第二个捕获条款捕获,没有。
尝试列表中的每个catch子句,看它是否匹配。匹配的第一个是唯一运行的,然后代码转到finally
子句。
另一个结果是,如果你有:
try {
throw SubTypeOfException(...);
} catch(Exception e) {
... block 1 ...
} catch(SubTypeOfException e) {
... block 2 ...
}
然后块1是唯一将运行的块,即使块2匹配也是如此。仅评估第一个匹配的catch子句。
答案 1 :(得分:2)
它被提升了一级。
你需要另一个尝试// catch块。