Netbeans中的“转换为资源试用” - 酷豆?

时间:2012-07-11 20:06:05

标签: java netbeans

我在Netbeans 7.1.2中有以下代码:

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));
bos.write(newRawData);
bos.close();

警告表明我“转换为试用资源”。当我选择这样做时,我的代码变为:

try (BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
        bufferedFos.write(newRawData);
    }

这看起来类似于在C#中使用(...)的语法...它们的工作方式是否相同?使用第二种格式有什么缺点吗?我担心缺少bos.close();,但这种格式是不是没必要?

2 个答案:

答案 0 :(得分:14)

这是Java 7中引入的一种新语法,它在声明try(...)语句时负责关闭您指定的所有资源。可以找到更多信息here 所以不,你不必做bos.close(),它是由Java执行的。你可以高枕无忧 唯一的缺点是您的代码仅适用于Java 7+。

答案 1 :(得分:5)

注意

“try with resources”语句为introduced in Java 7,以替代try...finally语句。基本上,它所做的只是让你不必添加:

finally {
  if(resource != null) resource.close();
}

try语句的末尾。如果您使用它,您的代码将仅适用于Java 7及更高版本。

答案

try是Java中一个名为try...catch的语句的一部分。您给出的警告的完整解决方案是:

try(BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
  bufferedFos.write(newRawData);
} catch(FileNotFoundException e) {
  e.printStackTrace();
}

“try with resources”块使用与try...catch块相同的结构,但会在块执行后自动关闭块内创建的所有资源。这就是您在代码中看不到bufferedFos.close();语句的原因。