有了Closeable为什么还要定义AutoCloseable
从try-with-resources语法块说起
我们知道java7中引入了新的语法块try-with-resources:实现了java.lang.AutoCloseable的对象都可以作为资源,在try后面的括号类声明实例化,在后面的{...}语句块执行完后被自动关闭(close()方法被自动调用)。例如:在java7前,我们需要这样定义语句:
1 | public void writeFile(String path,byte[] data){ |
而在java7后,可以变成这样:
1 | public void writeFile(String path,byte[] data){ |
Closeable与AutoCloseable的关系与区别
AutoCloseable的源码如下:
1 | /** |
Closeable的源码如下:
1 | /** |
由上可知Closeable在jdk1.5中就定义了,而AutoCloseable在jdk1.7才被引入,并且Closeable继承了AutoCloseable。为什么要这样设计呢?答案很简单,仔细查看源码就可以知道原因:
因为Closeable的close()方法只会抛出IOException异常,而AutoCloseable的close()方法抛出的是Exception异常。如此一来try-with-resources的适用性就更大了。
参考
如果觉得我的文章对您有帮助,请随意打赏。


