try-with-resources:Java 是不是对 .close() 的调用顺序做出任何保证?
Posted
技术标签:
【中文标题】try-with-resources:Java 是不是对 .close() 的调用顺序做出任何保证?【英文标题】:try-with-resources: Does Java make any guarantees about the order of calls to .close()?try-with-resources:Java 是否对 .close() 的调用顺序做出任何保证? 【发布时间】:2012-08-27 05:30:09 【问题描述】:在 Java 7 中使用 try-with-resources 时,是否可以保证调用 .close()
的顺序?
以下是来自 Oracle 的一些示例代码,展示了此功能:
try (
java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
)
// Enumerate each entry
for (java.util.Enumeration entries = zf.entries(); entries.hasMoreElements();)
// Get the entry name and write it to the output file
String newLine = System.getProperty("line.separator");
String zipEntryName = ((java.util.zip.ZipEntry)entries.nextElement()).getName() + newLine;
writer.write(zipEntryName, 0, zipEntryName.length());
zf.close()
和 writer.close()
都会被调用。订单有保障吗?
【问题讨论】:
【参考方案1】:是in the opposite order of declaration,由内向外关闭。
【讨论】:
以上是关于try-with-resources:Java 是不是对 .close() 的调用顺序做出任何保证?的主要内容,如果未能解决你的问题,请参考以下文章
java 7新特性-TWR(Try-with-resources)
[Java开发之路](20)try-with-resource 异常声明