我们在学习jdbc时,通过Connection,SqlSession ,inputStream等对象完成对数据库的操作,使用完资源后必须在finally中调一堆.close方法将资源关闭。那么有没有更好的方法呢?
//伪代码
SqlSession sqlSession = sqlSessionFactory.openSession()
try {
//......
}finally{
sqlSession.close();
}
下面我就为大家介绍一种简单快捷的自动释放资源方法。
从jdk1.7开始Java 7增强了try语句的功能。它允许在try关键字后跟一对圆括号,圆括号可以声明,初始化一个或多个资源,此处的资源指得是那些必须在程序结束时必须关闭的资源(比如数据库连接,网络连接等),try语句在该语句结束时自动关闭这些资源。这种称为try-with-resources语句。
//伪代码
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
//......
}
像这样的话,执行完sqlsession会自动关闭,不用我们在finally中关闭,那么为什么这样可以自动关闭资源呢?是不是所有的资源都可以这样关闭呢?
我们查看源码后发现凡是实现了Closeable或AutoCloseable接口的类,在try()里声明该类实例的时候,在try结束后,close方法都会被调用比如Sqlsession它就是extends Closeable, Closeable extends AutoCloseable除了Sqlsession之外几乎所有的资源都可以用这种方式实现自动关闭资源,比如OutputStream,BufferedReader,PrintStream,InputStream等,都可以。据说到目前为止,只有JavaMail Transport对象不能利用这种方式实现自动关闭。
注意:如果try()里面有两个资源,用逗号分开,资源的close方法的调用顺序与它们的创建顺序相反。带有资源的try语句可以像一般的try语句一样具有catch和finally块。在try-with-resources语句中,任何catch或finally块都是在声明的资源被关闭后才会执行的。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://chonglian.blog.csdn.net/article/details/123261707
内容来源于网络,如有侵权,请联系作者删除!