6

我想知道 java try-catch 语句的执行路径,找不到关于以下情况的详细信息。

如果我有这样的声明:

try {

  // Make a call that will throw an exception
  thisWillFail();

  // Other calls below:
  willThisExecute();

} catch (Exception exception) {
  // Catch the exception
}

thisWillFail() 下面的行会在移动到 catch 之前执行,还是会在抛出异常后立即执行 try 语句?

换句话说,假设 call 'a' 之后的 call 'b' 将执行是否安全,前提是 call 'a' 不会在 try 语句中引发异常?

谢谢

4

4 回答 4

12

不,下面的thisWillFail()行将不会执行。执行将移至 catch 块。

于 2014-06-28T14:11:35.763 回答
4

如果 try 子句中包含的任何子句产生错误,则 catch 子句中的代码(对应于该错误 - 一次尝试可以有多个 catch)将被执行。没有办法提前知道某个特定子句是否会失败,只能在错误发生后尝试恢复。

换句话说,只要thisWillFail()函数抛出异常,就会执行 catch 子句,从而绕过willThisExecute()函数。

于 2014-06-28T14:11:28.573 回答
1

你为什么不自己测试一下呢?

一旦抛出异常,try 块将被放弃并在catch/finally语句处继续执行。

于 2014-06-28T14:11:35.480 回答
1

它不会在那个try块中执行任何进一步的指令,它会跳转到catch块并执行catch块。然后它会执行finally(记住无论是否有任何异常都会执行finally)。进一步阅读这里是一个很好的文章行([ http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html]

于 2014-06-28T14:15:25.797 回答