最后在try catch中返回的行为

时间:2014-02-27 12:17:20

标签: java

在下面的代码中,我想了解return语句的行为。Finally块将始终执行,因此该函数将始终return 30,但是在try中返回语句的意义是什么这个返回try块返回值给它的调用者,它会将这个值存储在某个堆栈中,当它在finally块中看到一个return语句时被替换掉?或者在try块中返回会调用finally块?

public static int test() {
    try {
           return 10;// to whom this 10 is returned to?
    } catch (Exception e) {
       return 20;
    }finally{
           System.out.println("Finally");
       return 30;
    }
}

提前致谢。

3 个答案:

答案 0 :(得分:1)

1030都将返回。但30位于stack(最顶层元素)之上。所以调用者得到的返回值为30

答案 1 :(得分:1)

finally块仅应用于资源清除,例如。

  public static int test() {
    MyResource resource = null;

    try {
      // resource allocation
      MyResource resource = MyResource.allocate();

      ... // do something with the resource

      return 10; // <- Normal flow
    } 
    catch(MyResourceException e) {
      ... // something was wrong with resource

      return 20; // <- Abnormal, but expected flow
    }
    finally {
      // In any case - has an exception (including errors) been thrown or not 
      // we have to release allocated resource 

      // The resource has been allocated 
      if (resource != null)
        resource.release();

      // no return here: finally is for resource clearing only
    }
  }

如果您将return 30放入finally 这两个值(例如,1030)将是 堆叠;但由于30位于堆栈的顶部,因此您会看到30

答案 2 :(得分:0)

由于在您的情况下将始终执行finally块以清理资源,因此它将位于堆栈顶部,因为它将是30。但是,如果您想直接退出try块,则可以使用System.exit()