Skip to content

Java7 新特性——try-with-resources 用法(AutoCloseable和Closeable)

Java 7 之前的处理

在 Java 7之前,IO 操作为了保证资源能被关闭,往往会在 try 代码块后加上 finally 代码块来处理资源的关闭。

java
public static void testClose(String path){
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(path));
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        if(br!=null){
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

try-with-resources

Java 7新增了try-with-resources语法来保证资源的关闭

java
public static void testAutoClose(String path) {
    try(BufferedReader br = new BufferedReader(new FileReader(path));){

    }catch(Exception e){
        e.printStackTrace();
    }
}

BufferedReader 会在代码块里处理完后会被关闭,不需要显式调用 BufferedReader 的 close 方法,也不需要 implements Closeable 或 AutoCloseable 接口。

(也可以自定义 close() 方法:但是需要先 implements Closeable 或 AutoCloseable 接口,然后 @Override close() 方法即可)

注意事项

1.被关闭的资源类需要实现 AutoCloseable 接口,Closeable 接口继承于 AutoCloseable,所以由于 BufferedReader 实现了 Closable 接口,所以可以用 try-with-resources 自动关闭。

2.需要自动关闭的资源在 try 后面的括号里声明。允许声明多个被关闭的资源,关闭的顺序是与创建资源的顺序相反。