傳統方式使用finally塊來關閉物理資源,保證關閉操做老是會被執行。html
其中有多個字段的還比較麻煩一點,關閉的時候爲每個物理資源使用單獨的try...catch塊來關閉資源,保證關閉資源時引起的異常不會影響其餘資源的關閉。java
爲了解決以上傳統方式的問題, Java7新增了自動關閉資源的try語句。它容許在try關鍵字後緊跟一對圓括號,裏面能夠聲明、初始化一個或多個資源,此處的資源指的是那些必須在程序結束時顯示關閉的資源(數據庫鏈接、網絡鏈接等),try語句會在該語句結束時自動關閉這些資源。數據庫
爲了保證try語句能夠正常關閉資源,這些資源實現類必須實現Closeable或AutoCloseable接口,實現這些類就必須實現close方法。微信
最後,try-with-resources 語句能夠像Java SE 7 以前的普通try語句同樣帶有catch塊和finally塊,但在執行catch塊(如有必要)和finally塊中的代碼前,會先關閉 try-with-resources 語句中聲明的資源。網絡
在傳統的例子中,若是 ps.println()與close()方法先後都產生了異常,那麼在用finally塊關閉PrintStream對象時,由 ps.println()方法產生的(第一個)異常會被抑制(suppressed),只有close()產生的(第二個)異常會被向上傳遞;相反,若用 try-with-resources 語句的話,則只有 try 塊中產生的異常被向上傳遞(這個異常的信息一般更有用),try-with-resources 語句中產生的異常則會被抑制。固然,在Java SE 7之後,被抑制的異常能夠經過調用Throwable.getSuppressed()方法獲取。oracle
參考文檔:htm
The try-with-resources Statement (The Java™ Tutorials > Essential Classes > Exceptions)對象
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html接口
有什麼交流的,能夠加我微信公衆號留言:資源