jdk7自动关闭资源(try-with-resources模式)

从jdk7开始增加了try-with-resources模式,可以自动关闭资源,代码示例如下:

try (OutputStream out = openOutputStream(file, append)) {
IOUtils.write(data, out, encoding);
}
System.out.println("continue");

try()中定义的变量(必须实现AutoCloseable接口)在{}代码执行结束(包含异常退出)后,会自动调用变量的close()方法。

如果{}中的代码抛出异常,并且try()中变量的close()也抛出异常,则{}中异常会向外传播,而close()中的异常会被抑制。

上面示例代码,如果{}中的代码或close()抛出异常,则会直接对外抛出异常,System.out.println("continue");将不会执行,可以加上catch,代码如下:

try (OutputStream out = openOutputStream(file, append)) {
IOUtils.write(data, out, encoding);
}catch (Exception e) {
e.printStackTrace();
}
System.out.println("continue");

{}中的代码或close()抛出异常会被catch住,System.out.println("continue");将会执行。

如果try()中定义了多个变量,则会按照创建顺序的逆序来关闭,代码示例如下:

try (FileInputStream input = new FileInputStream("file.txt");
    BufferedInputStream bufferedInput = new BufferedInputStream(input)
) {
    int data = bufferedInput.read();
    while (data != -1) {
        System.out.print((char) data);
        data = bufferedInput.read();
    }
}

{}中的代码执行结束后,会先调用bufferedInput.close(),再调用input.close()

标签: jdk7自动关闭资源(try-with-resources模式)

添加新评论