【问题标题】:Java: Does try execute all lines, or jump to catch?Java:尝试执行所有行,还是跳转到捕获?
【发布时间】:2014-08-19 11:52:58
【问题描述】:

想知道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之前执行,还是会在抛出异常时立即跳转到catch?

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

谢谢

【问题讨论】:

  • 是什么阻止你尝试它?
  • 只有时间,但我认为这对其他人来说也是一个有用的问题,因为我没有轻易找到答案。

标签: java try-catch order-of-execution


【解决方案1】:

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

【讨论】:

  • 我选择了你的答案,因为它直截了当,尽管其他答案也正确且有用。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        相关资源
        最近更新 更多