【问题标题】:return statement in java exception handling [duplicate]java异常处理中的return语句[重复]
【发布时间】:2013-03-15 01:30:26
【问题描述】:

如果执行没有导致异常,则控制转到 finally 块。 那么,JVM 是否忽略了 try 块中的 return 语句?。或者,如果发生异常,则控制转到 catch 块,它也忽略返回语句,控制转到 finally 块并从 finally 返回

  public class Helper {
     public int showException(int a, int b){

           try{
           int c=a/b;
           return c;
           } catch(Exception e){
                return 0;
           } finally{
               return 3;
             }
     }
  }

【问题讨论】:

  • 'return' 在 catch 块中是糟糕的设计。
  • 无论如何,Finally 总是运行,尝试删除 finally(如果不需要)。
  • @Falaque 为什么会这样?如果您的操作成功后需要返回怎么办?
  • @ToonCasteele 如果成功,它不会去抓块。
  • 那么您总是将return false; 放在方法的末尾以防不成功?

标签: java exception-handling


【解决方案1】:

因为无论你输入try还是catch,每次都会执行finally块,我想这就是为什么它被称为finally :)

FROM JAVA DOCS

finally 块总是在 try 块退出时执行。这 确保即使出现意外情况也会执行 finally 块 发生异常。

注意:只有在

如果在执行 try 或 catch 代码时 JVM 退出,则 finally 块可能不会执行。同样,如果线程正在执行 try 或 catch 代码被中断或杀死,finally 块可能 即使整个应用程序继续运行,也不会执行。

【讨论】:

  • 我要问的是,如果try中没有异常,那么try中的return应该执行,或者如果发生异常,catch中的return应该执行,然后控制权转到finally。这是否意味着JVM忽略了try或catch块中的返回
  • @sonal:是的,只有当您在 finally 中定义了 return 时,它才会忽略 try 中的 return
  • @sonal: 放置在 finally 块中的代码必须在 try 块中发生的任何情况下执行
  • 嗯...谢谢codeMaker
【解决方案2】:

根据设计,finally 块中的返回总是优先。

【讨论】:

    【解决方案3】:

    无论是否调用 catch 块,最后都会被调用。也许您想阅读更多文档。 MSDN Try Catch Finally

    【讨论】:

    • 这是关于 java,而不是 javascript
    • 当我点击链接时,链接会转到 javascript...
    【解决方案4】:

    不管try catch块是否执行,finally块总是被执行

    【讨论】:

    • try/catch 块中的 return 怎么样,JVM 是否只从 finally 返回。
    【解决方案5】:

    finally 块总是在 try 块退出时执行。这 确保即使出现意外情况也会执行 finally 块 发生异常。但 finally 不仅仅对异常有用 处理——它允许程序员避免清理代码 意外地被返回、继续或中断绕过。进行清理 finally 块中的代码始终是一个好习惯,即使没有 预计会有例外情况。

    阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2016-04-25
      • 1970-01-01
      相关资源
      最近更新 更多