如何关闭 Java Formatter,最后还是没有?
How to close Java Formatter, in finally or not?
我知道通常 Java 中的 streams
和 formatters
(特别是 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()
的调用不执行任何操作。如果您要使用 Writer
或 PrintStream
,它们是可关闭的,并且必须调用 close()
以避免让流保持打开状态。
如果您不确定它是否是 Closable
,最好还是直接调用 close()
。这样做没有坏处。
我知道通常 Java 中的 streams
和 formatters
(特别是 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()
的调用不执行任何操作。如果您要使用 Writer
或 PrintStream
,它们是可关闭的,并且必须调用 close()
以避免让流保持打开状态。
如果您不确定它是否是 Closable
,最好还是直接调用 close()
。这样做没有坏处。