try-with-resources 的理解
java中try-with-resources自动关闭io流
0 简要说明
在传统的输入输出流处理中,我们一般使用的结构如下所示,使用try - catch - finally结构捕获相关异常,最后不管是否有异常,我们都将流进行关闭处理。
try-with-resources 语句无法管理所有类。Java SE 7 引入了一个新接口 java.lang.AutoCloseable。它的作用就是提供一个名为 close() 的 void 方法,该方法可能抛出一个检查到的异常 (java.lang.Exception)。任何希望在 try-with-resources 语句中使用的类都应实现该接口。强烈建议,实现的类和子接口应声明一种比 java.lang.Exception 更精确的异常类型,当然,更好的情况是,如果调用 close() 方法不会导致失败,就根本不用声明异常类型。
此类 close() 方法已经进行了改进,包含在标准 Java SE 运行时环境的许多类中,这些类包括 java.io、java.nio、javax.crypto、java.security、java.util.zip、java.util.jar、javax.net 和 java.sql packages。这种方法的主要优点在于,现有代码可继续像以前那样工作,而新代码可以轻松利用 try-with-resources 语句。
try {
//业务代码
} catch (SQLException e) {
// 异常,数据回滚
try {
connection.rollback();
} catch (SQLException ex) {
log.error(ERROR_MSG, e);
throw new IllegalArgumentException(e);
}
log.error(ERROR_MSG, e);
throw new IllegalArgumentException(e);
} finally {
if (Objects.nonNull(preparedStatement)) {
try {
preparedStatement.