Dan*_*ton 11 java exception-handling try-catch-finally control-flow
public Foo doDangerousStuff() throws Exception {
try {
dangerousMethod();
return new Foo();
} catch (Exception e) {
throw e;
} finally {
mustBeCalledAfterDangerousMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
这与我们省略catch子句的行为有什么不同吗?
public Foo doDangerousStuff() throws Exception {
try {
dangerousMethod();
return new Foo();
} finally {
mustBeCalledAfterDangerousMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑]为了清除混淆,是的,catch除了重新抛出异常之外,该块不执行任何操作.我想知道这是否会在finally调用块时引起某种不同的排序(假设调用者捕获了抛出的异常),但是从我从答案推断出来的情况来看,它并没有.
尽管两个源代码代表相同的执行顺序,但它们将产生不同的字节码。例如,第一个例程将有一个异常表,而第二个例程则不会。在没有检测的情况下,它们的字节码在执行期间将具有相同的效果。如果编译后对字节码进行检测,或者捕获的异常属于其类文件在执行期间不可用的类型,则这些方法的行为可能会有所不同。
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |