我知道Java中的streams
和formatters
(特别是java.util.Formatter
)通常应在finally
中关闭以避免资源泄漏。但在这里我有点困惑,因为我看到很多例子,人们只是关闭它而没有任何最终阻止,特别是格式化程序。这个问题可能对某些人没有意义,但我想确定我所询问的内容。
来自java2s.com和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);
}
答案 0 :(得分:2)
在此特定示例中,无需致电close()
。如果底层附加程序为Closable
,则只有需要才能关闭格式化程序。在这种情况下,您使用的StringBuffer
不是Closable
,因此对close()
的调用不执行任何操作。如果您使用Writer
或PrintStream
,那么这些内容可以关闭,并且必须调用close()
以避免让流畅通。
如果您不确定是Closable
,最好还是致电close()
。这样做没有坏处。
答案 1 :(得分:0)
如何做到这一点,没有进一步的评论:
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();
}
}
}