try-with-resources结构

还在为自动关闭资源发愁?Java其实早就解决了这个问题,只是很多人不知道而已。

这就是 try-with-resources语法:

try (资源1声明; 资源2声明; 资源3声明) {

// 使用资源的业务代码

}

catch (异常类型 e) {

// 异常处理代码

}

这样写的作用:当 try 代码块执行完毕(无论是正常结束还是因为发生异常而中断),JVM 都会自动调用声明的每个资源的 close() 方法来关闭。但是这样做有个前提条件:

括号内声明的资源类必须实现 AutoCloseable 接口 (Java 7 及以上)或 Closeable 接口(Java 5 及以上)。常见的实现类包括 InputStreamOutputStreamConnectionStatementResultSet 等都实现了,放心大胆去用。

而且这个特性早在Java7就已经有了。到了java9又做了进一步增强:

在 Java 9 之前,资源必须在 try 的括号内声明。从 Java 9 开始,如果外部已经声明了资源,且该变量是 final 或等效于 final(即声明后未被重新赋值),可以直接将变量名放入括号中。

在处理 I/O 流、JDBC 数据库连接等场景时,强烈建议优先使用 try-with-resources。相比于传统的 try-catch-finally 手动关闭方式,它不仅大幅减少了样板代码,还能有效避免资源泄漏和空指针异常,使代码更加简洁、安全且易于维护。