首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Netbeans - Cool Beans中“转换为try-with-resources”?

在Netbeans - Cool Beans中“转换为try-with-resources”?
EN

Stack Overflow用户
提问于 2012-07-12 04:06:05
回答 2查看 9.3K关注 0票数 10

我在Netbeans 7.1.2中有以下代码:

代码语言:javascript
复制
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));
bos.write(newRawData);
bos.close();

一条警告建议我“转换为try-with-resources”。当我选择这样做时,我的代码变成:

代码语言:javascript
复制
try (BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
        bufferedFos.write(newRawData);
    }

这看起来类似于使用(...)在C#中...它们的工作方式是一样的吗?使用第二种格式有什么缺点吗?我担心bos.close();的缺失,但是对于这种格式,它就不是必要的了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-12 04:09:35

这是Java7中引入的一种新语法,它负责关闭在声明try(...)语句时指定的任何资源。更多信息可以在here上找到。

所以不,你不需要做bos.close(),它是由Java执行的。你可以坐下来放松一下。

惟一的缺点是您的代码只能与Java 7+一起使用。

票数 14
EN

Stack Overflow用户

发布于 2012-07-12 04:16:09

备注

"try with resources“语句被introduced in Java 7作为try...finally语句的替代。基本上,它所做的就是让您不必添加:

代码语言:javascript
复制
finally {
  if(resource != null) resource.close();
}

添加到try语句的末尾。如果您使用它,您的代码将只能在Java7和更高版本中工作。

回答

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

代码语言:javascript
复制
try(BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
  bufferedFos.write(newRawData);
} catch(FileNotFoundException e) {
  e.printStackTrace();
}

"try with resources“块使用与try...catch块相同的结构,但一旦执行,它会自动关闭在块内创建的任何资源。这就是为什么在代码中看不到bufferedFos.close();语句的原因。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11440592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档