1.Closeable与AutoCloseable接口
它们在JDK中的定义见下:
public interface AutoCloseable {void close() throws Exception;/*since jdk1.7*/} public interface Closeable extends AutoCloseable {public void close() throws IOException;/*since jdk1.5*/}
一些会占用操作系统资源的对象(如文件、socket句柄等)都会实现Closeable接口。调用close()方法,jvm就会释放给操作系统。一般来讲,即便不调用,进程结束后操作系统也会回收。但是像运行在tomcat等容器中的web项目代码,项目停了但tomcat没停,会有资源泄露的风险。
2.用法
新增特性适用于带资源的try语句( try-with-resources block )。
形如 try( 资源类对象的声明 ){ 可能有异常抛出的语句块 }catch{}。即便没有finally,圆括号中的资源也会按声明的顺序 逆序close()。这个由jvm实现。
形如 try( 资源类对象的声明 ){ 可能有异常抛出的语句块 }catch{}。即便没有finally,圆括号中的资源也会按声明的顺序 逆序close()。这个由jvm实现。
好处是少写了与业务无关的代码,更精炼。