如何关闭 Java Formatter,最后还是没有?

How to close Java Formatter, in finally or not?

我知道通常 Java 中的 streamsformatters(特别是 java.util.Formatter)应该在 finally 中关闭以避免资源泄漏。但在这里我有点困惑,因为我看到很多例子,人们只是关闭它而没有任何 finally 块,尤其是格式化程序。这个问题对某些人来说可能没有意义,但我想确定我在问什么。 java2s.com and from tutorialspoint.com 中的一些示例,其中格式化程序只是在没有任何阻塞的情况下关闭。
请注意我的问题仅针对 Java 6 及更低版本,因为我知道尝试使用资源。

示例:

public static void main(String[] args) {


  StringBuffer buffer = new StringBuffer();
  Formatter formatter = new Formatter(buffer, Locale.US);

  // format a new string
  String name = "from java2s.com";
  formatter.format("Hello %s !", name);

  // print the formatted string
  System.out.println(formatter);

  // close the formatter
  formatter.close();

  // attempt to access the formatter results in exception
  System.out.println(formatter);
}

这个怎么样,不多说了:

public static void main(String[] args) {
  StringBuffer buffer = new StringBuffer();
  Formatter formatter = null;
  try {
    formatter = new Formatter(buffer, Locale.US);
    String name = "from java2s.com";
    formatter.format("Hello %s !", name);
    System.out.println(formatter);
  }
  finally {
    if (formatter != null) {
      formatter.close();
    }
  }
}

在这个具体的例子中,没有必要调用close()。如果底层附加程序是 Closable,您只需要 关闭格式化程序。在这种情况下,您使用的是 StringBuffer,它不是 Closable,因此对 close() 的调用不执行任何操作。如果您要使用 WriterPrintStream,它们是可关闭的,并且必须调用 close() 以避免让流保持打开状态。

如果您不确定它是否是 Closable,最好还是直接调用 close()。这样做没有坏处。