Closeable接口

Closeable用于需要关闭的数据的源或者目标。close()方法在当你需要释放被某些对象正在持有的资源(比如打开文件)的时候被调用。它是stream(文件流)类的一个重要的接口之一。Closeable接口是JDK5开始引入并在java.io.中实现的。从JDK7+开始,我们推荐使用AutoCloseable接口。Closeable接口是为了保持后续兼容性而引入的老接口。

由于Closeable接口继承自AutoCloseable接口,所以实现了Closeable接口的类也就实现了AutoCloseable。

Closeable和AutoCloseable的区别

  • Closeable是JDK5引入,然而AutoCloseable是JDK7+引入
  • Closeable继承自AutoCloseable并且,Closeable针对性用于IO流
  • Closeable继承了IOException,而AutoCloseable继承了Exception
  • Closeable接口是幂等的(多次调用close()方法没有任何副作用),而AutoCloseable不提供幂等性的支持
  • AutoCloseable是为了和try-with-resource语句协作而引用的,自从Closeable实现AutoCloseable,因此任何实现了Closeable也间接实现了AutoCloseable接口,并且能够使用try-with-resource资源来关闭文件。

AutoCloseable、Closeable与try-with-resource

已经实现了Closeable或AutoCloseable的类,如果想让其生效(即调用close()方法),必须和try-with-resource语句一起使用。示例如下:

public class Test {
    public Test(){
        try(MyCloseableClass myCloseableObject = new MyCloseableClass()){
            System.out.println("Test is Running...");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    class MyCloseableClass implements AutoCloseable{
        @Override
        public void close() throws Exception {
            System.out.println("close resource...");
        }
    }

    public static void main(String[] args) {
        Test test = new Test();
    }
}

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注