Java try catch语句块中try()的括号中代码作用

了解过Mybatis,都知道DefacltSqlSession是线程不安全的。每次执行查询都需要新建一个sqlSession。因此官方给的建议写法如下:

Mybatis3

从 SqlSessionFactory 中获取 SqlSession
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:

try (SqlSession session = sqlSessionFactory.openSession()) {
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}

那么问题来了,有些人可能不明白,try()的括号中代码作用是什么?为什么这么写呢?

应用场景:当我们使用带资源的try语句时,使用finally也许会造成一个异常被覆盖的问题,即try语句块中会抛出某个异常,执行finally语句块中跑出了同样的异常,这样的话就会导致原有的异常会丢失,转而抛出的finally语句中的异常。这时我们可以使用带资源的try语句来处理(前提是这个资源实现了AutoCloseable接口的类)

看了这个解释你是不是和我一样明白了呢。

当然,使用finally关闭资源也是完全可以的。

原文地址:https://www.cnblogs.com/hbuuid/p/14966328.html