码迷,mamicode.com
首页 > 其他好文 > 详细

try(){}自动释放资源,AutoCloseable

时间:2019-04-23 22:41:14      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:toc   out   source   连接   语句   cto   jdk   创建   catch   

 

 

  我们在使用资源的时候,必须关闭资源,比如使用jdbc连接或者inputStream的时候,必须在finally中将资源关闭。然而有的时候我们会忘记关闭资源。那么有没有更好的方法呢?

   

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接口,就可以自动关闭。比如Sqlsession它就是extends Closeable, Closeable extends AutoCloseable。

  几乎所有的资源都可以用这种方式实现自动关闭资源,比如OutputStream,BufferedReader,PrintStream,InputStream等,都可以。据说到目前为止,只有JavaMail Transport对象不能利用这种方式实现自动关闭。

  注意:如果try()里面有两个资源,用逗号分开,资源的close方法的调用顺序与它们的创建顺序相反。

     带有资源的try语句可以像一般的try语句一样具有catch和finally块。在try-with-resources语句中,任何catch或finally块都是在声明的资源被关闭后才会执行的。

try(){}自动释放资源,AutoCloseable

标签:toc   out   source   连接   语句   cto   jdk   创建   catch   

原文地址:https://www.cnblogs.com/heqiyoujing/p/10759451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!