当涉及从finally块返回的值时,在try块中有return语句是好的做法

Che*_*eng 19 java

我想知道,是不是很好的做法,returntry块?

package debug;

/**
 *
 * @author Owner
 */
public class Main {

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

  static boolean cleanup() {
    // Fail to cleanup.
    return false;
  }

  static boolean fun() {
    boolean everything_is_fine = true;
    try {
      System.out.println("open file stream");
      return everything_is_fine;
    } finally {
      everything_is_fine = cleanup();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我首先想到false会打印出来.但是,这是输出:

open file stream
true
Run Code Online (Sandbox Code Playgroud)

如您所见,如果我returntry块内有语句,我将在finally清理期间错过失败状态.

我要把代码作为:

  static boolean fun() {
    boolean everything_is_fine = true;
    try {
      System.out.println("open file stream");      
    } finally {
      everything_is_fine = cleanup();
    }
    return everything_is_fine;
  }
Run Code Online (Sandbox Code Playgroud)

只要涉及finally块的返回值,我应该避免从尝试返回吗?

Boz*_*zho 18

您建议的代码(在问题的最后)是好的.您可以finally块中返回,但您不应该 - 例如eclipse显示警告"finally块无法正常完成".

实际上,try/finally并没有直接关系到return.这似乎是这样,因为它是方法中唯一的构造,但是之后你可以有其他代码(例如 - 事件通知),然后返回.

至于你的问题-你不能改变的值返回的变量finally,如果已经返回它块.所以不要从try.