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 异常声明

try-with-resources:Java 是不是对 .close() 的调用顺序做出任何保证?

Java Try-With-Resources 辩论

java7 try-with-resources

java中的try-with-resources和return语句