在java中尝试catch-finally

时间:2011-08-22 06:20:19

标签: java try-catch try-catch-finally

在Java中,如果我们在里面插入一个return语句,那么finally块是否会被执行 try-catch-finally的尝试块?

7 个答案:

答案 0 :(得分:23)

只有在finally到达exit()之前调用finally时才会执行exit()阻止。 {{1}}调用将关闭JVM,因此不会运行任何后续代码行。

编辑:这不完全正确。有关其他信息,请参阅以下注释。

答案 1 :(得分:9)

无论你是否返回,finally块总是会执行,或者在try块中抛出异常。

另见Java语言规范的14.19.2 Execution of try-catch-finally部分

答案 2 :(得分:3)

在所有这些情况下都会执行finally块。最后执行finally块的目的是允许您释放所有获取的资源。

以下是一个展示其工作原理的示例。

public class Hello {

    public static void hello(){
        try{
            System.out.println("hi");
            return;
            }catch(RuntimeException e){
        }finally{
            System.out.println("finally");

        }

    }

    public static void main(String[] args){
        hello();
    }
}

答案 3 :(得分:2)

即使您在try块内返回也会执行。我把一个return语句放在try里面,最后放在一个里面,返回的值是来自finally,而不是try。

public class HelloWorld{
   public static void main(String args[]){
      System.out.println(printSomething());
   }

   public static String printSomething(){
      try{
          return "tried";
      } finally{
          return "finally";
      }
   }
}

我得到的输出是“终于。”

答案 4 :(得分:0)

根据official explanation

  

注意:如果在执行try或catch代码时JVM退出,则finally块可能无法执行。同样,如果执行try或catch代码的线程被中断或终止,则即使整个应用程序仍在继续,finally块也可能无法执行。

我认为在我们发布答案之前我们应该参考官方网站是个好主意。

答案 5 :(得分:0)

当方法试图通过未捕获的异常或显式返回语句返回调用者时,finally子句也会在方法返回之前执行。

答案 6 :(得分:-3)

如果您按其他人的说法致电System.exit(),则不会执行,但我相信如果在except块中存在异常,也不会执行

相关问题