有了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
的适用性就更大了。
参考
如果觉得我的文章对您有帮助,请随意打赏。