34

我是新来的Java8,我想知道对于AutoCloseable资源,我是否必须try为每个添加一个resource,否则它将与上面的代码一起使用

try (Connection conn = getConnection();) {

            Statement stmt = conn.createStatement();

            ResultSet rset = stmt.executeQuery(sql);

            while (rset.next()) {
                TelefonicaDataVO vo = new TelefonicaDataVO();
                vo.setTelefonicaDataId(rset.getString("Telefonica_PSD_ID"));
                vo.setReceptionDate(nvl(rset.getTimestamp("CREATION_DATE")));
                vo.setMessage(nvl(rset.getString("MESSAGE")));
                ret.add(vo);
            }
        }
4

1 回答 1

66

Try with resources 可以通过在try块中声明它们来与多个资源一起使用,并且这个特性是在java 7中引入的,而不是在java 8中如果你有多个,你可以像下面这样给出

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());
        }
    }

在此示例中,该try-with-resources语句包含两个用分号分隔的声明:ZipFileBufferedWriter。当直接跟随它的代码块正常或由于异常终止时,BufferedWriter 和 ZipFile 对象的 close 方法将自动按此顺序调用。请注意,资源的关闭方法以与它们创建相反的顺序被调用。.

请参阅文档以获取更多信息

于 2017-11-08T09:11:14.573 回答