在java7以前,對於一些須要使用finally關閉資源的操做,會顯得很臃腫.java
try { // } catch(Exception e) { // } finally { if(xxxx != null) { xxxx.close(); } }
在java7中引入了能夠在try中直接聲明須要關閉的資源的功能,在try後的圓括號直接定義一個或多個資源便可.編程
try( var xxx = new xxx(); var xxx = new xxx(); ) { // }
可是這些類都須要實現了Closeable或AutoCloseable接口,實現其中的close().學習
Closeable接口是AutoCloseable的子接口,其中的close()拋出了IOException異常,實現接口時要注意拋出的異常需是IOException異常或IOException子類異常..net
AutoCloseable接口中的close()拋出的異常是Exception,實現接口時能夠拋出任何類型的異常.code
java7幾乎把全部的"資源類"(包括文件IO的各類類,JDBC編程的Connection,Statement等接口)進行了改寫,改寫後的資源都實現了AutoCloseable或Closeable接口.(引自<<瘋狂Java講義>>(第5版) P381)
java9不像java7同樣在try中定義資源,只須要自動關閉的資源有final修飾便可.也就是說,能夠不在try中聲明,在try前聲明且使用final修飾便可.blog
final var xxx = new xxx(); final var xxx = new xxx(); try(xxx;xxx) { // }
一塊兒學習,一塊兒成長.資源