try(){}自動釋放資源 。try-with-resources語句 Closeable或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塊都是在聲明的資源被關閉後纔會執行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章