AutoCloseable & Closeable
Closeable
和AutoCloseable
都是接口,且都只定义了一个close()方法。
Closeable:
定义于 java.io包中,于JDK5添加;
AutoCloseable:
定义于java.lang包中, 于JDK7添加;
AutoCloseable.java
package java.lang;
public interface AutoCloseable {void close() throws Exception;
}
Closeable.java
从JDK7开始,Closeable扩展了AutoCloseable
package java.io;
import java.io.IOException;
public interface Closeable extends AutoCloseable {public void close() throws IOException;
}
因此从JDK7开始,Closeable和AutoCloseable具有相同的功能,因此下面只介绍AutoCloseable。
注意这里申请资源的语句放在了紧跟着try的小括号中,这属于JDK1.7的新语法。只要用这样的语法申请实现了AutoCloseable接口的资源类,就无需使用finally块手动释放这些资源。
带资源的try语句的3个关键点:
- 由带资源的try语句管理的资源必须是实现了AutoCloseable接口的类的对象。
- 在try代码中声明的资源被隐式声明为final。
- 通过使用分号分隔每个声明可以管理多个资源。