在Java中尝试使用多个资源

在Java中尝试使用多个资源,java,try-with-resources,autocloseable,Java,Try With Resources,Autocloseable,我是Java8新手,我想知道,对于AutoCloseable资源,我是否必须为每个资源添加try,否则它将与上面的代码一起工作 try (Connection conn = getConnection();) { Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery(sql); while (rset.next()) {

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

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

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方法都会按此顺序自动调用请注意,资源的close方法的调用顺序与其创建顺序相反。

请参阅以了解更多信息