try(){}自動釋放資源,AutoCloseable


 

 

  我們在使用資源的時候,必須關閉資源,比如使用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塊都是在聲明的資源被關閉后才會執行的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM