Java &引用;“转换为使用资源进行尝试”;在Netbeans中-酷豆?
我在Netbeans 7.1.2中有以下代码:Java &引用;“转换为使用资源进行尝试”;在Netbeans中-酷豆?,java,netbeans,Java,Netbeans,我在Netbeans 7.1.2中有以下代码: BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename)); bos.write(newRawData); bos.close(); 一条警告建议我“转换为使用资源进行尝试”。当我选择这样做时,我的代码变成: try (BufferedOutputStream bufferedFos = new BufferedOutputStream(n
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()这是Java 7中引入的一种新语法,它负责关闭声明try(…)
语句时指定的任何资源。可以找到更多信息。
因此,不必执行bos.close()
,它是由Java执行的。你可以坐下来放松。
唯一的缺点是,您的代码仅适用于Java 7+。注意
“try with resources”语句替代了try…finally
语句。基本上,它所做的只是让您不必添加:
finally {
if(resource != null) resource.close();
}
请在语句的末尾尝试。如果您使用这个,那么您的代码将只适用于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()代码中的code>语句。try with resources块将关闭在try(…)
块中打开的任何资源。我想看一下oracle文档以更好地理解它:对于许多资源,它使您不必添加最后{if(resource!=null){try{resource.close();}catch(Exception e){}}}}
,这甚至更难看(特别是因为它没有在注释中格式化)轻微更正:关闭在代码块前面的括号内创建的所有资源。