在java中尝试/ catch块返回与finally子句

这个问题在这里已经有了答案:

  • 最终总是在Java中执行? 50个答案

  • finallyreturn语句之前执行。 由于Java规则finally总是会除了在案件执行时JVM崩溃或System.exit()调用。

    Java语言规范清楚地提到最终在不同情况下的执行:

    http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2


    return语句对finally块的执行没有影响。 finally块不执行的唯一方法是如果JVM在执行finally块之前崩溃/退出。 查看此链接获取更多信息。 所以,如果你的代码被替换

    try{
      System.exit(0);
    }
    catch(SomeException e){
      System.out.println(e);
    }
    finally{
      System.out.println("This is the finally block");
    }
    

    finally块将不会执行


    Juned是正确的。 我也想告诫有关从finally块中抛出异常,他们会扼制发生的其他异常。 例如(有点愚蠢的例子,但它表明了):

    boolean ok = false;
    try {
       // code that might throw a SQLException
       ok = true;
       return;
    }
    catch (SQLException e) {
       log.error(e);
       throw e;
    }
    finally {
       if (!ok) {
          throw new RuntimeException("Not ok");
       }
    }
    

    在这种情况下,即使在捕获并重新抛出SQLException时,finally也会在此处引发RuntimeException,并且它将“屏蔽”或覆盖SQLException。 调用者将收到RuntimeException而不是SQLException。

    链接地址: http://www.djcxy.com/p/73707.html

    上一篇: try/catch block return with finally clause in java

    下一篇: Does finally always get called?