我想知道java try-catch语句的执行路径,但无法找到有关以下情况的详细信息。
如果我有如下声明:
try {
// Make a call that will throw an exception
thisWillFail();
// Other calls below:
willThisExecute();
} catch (Exception exception) {
// Catch the exception
}
在移动到catch之前,thisWillFail()下面的行是否会执行,或者一旦抛出异常,try语句的执行是否会跳转到catch?
换句话说,假设调用'a'不会在try语句中抛出异常,是否可以安全地假设调用'a'后调用'b'?#/ p>
由于
答案 0 :(得分:9)
不,thisWillFail()
下面的行不会执行。执行将转移到catch块。
答案 1 :(得分:4)
如果try子句中包含的任何子句生成错误,则将执行catch子句中的代码(对应于该错误 - 您可以在一次尝试中使用多个catch)。没有办法提前知道某个特定子句是否会失败,只是在错误发生后尝试恢复。
换句话说,只要thisWillFail()
函数抛出异常,就会执行catch子句,从而绕过willThisExecute()
函数。
答案 2 :(得分:1)
为什么不亲自测试一下?
抛出异常后,将放弃try块并在catch/finally
语句处继续执行。
答案 3 :(得分:0)
它不会在该try块中执行任何进一步的指令,它将跳转到catch块并执行catch块。之后它将最终执行(记住最后将在每种情况下都执行是否有任何异常)。在这里进一步阅读是一篇很好的文章行([http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html])