我在Netbeans 7.1.2中有以下代码:
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));
bos.write(newRawData);
bos.close();一条警告建议我“转换为try-with-resources”。当我选择这样做时,我的代码变成:
try (BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
bufferedFos.write(newRawData);
}这看起来类似于使用(...)在C#中...它们的工作方式是一样的吗?使用第二种格式有什么缺点吗?我担心bos.close();的缺失,但是对于这种格式,它就不是必要的了吗?
发布于 2012-07-12 04:09:35
这是Java7中引入的一种新语法,它负责关闭在声明try(...)语句时指定的任何资源。更多信息可以在here上找到。
所以不,你不需要做bos.close(),它是由Java执行的。你可以坐下来放松一下。
惟一的缺点是您的代码只能与Java 7+一起使用。
发布于 2012-07-12 04:16:09
备注
"try with resources“语句被introduced in Java 7作为try...finally语句的替代。基本上,它所做的就是让您不必添加:
finally {
if(resource != null) resource.close();
}添加到try语句的末尾。如果您使用它,您的代码将只能在Java7和更高版本中工作。
回答
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();语句的原因。
https://stackoverflow.com/questions/11440592
复制相似问题