try-with-resources是jdk1.7加入的機制,能夠保證資源使用後正常關閉,並使代碼更加簡潔。java
try-catch-finally使用實例:spa
public void handle(String fileName) { BufferedReader reader = null; try { String line; reader = new BufferedReader(new FileReader(fileName)); while ((line = reader.readLine()) != null) { ... } } catch (Exception e) { ... } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { ... } } } }
能夠看到爲了保證resources正常關閉,finally中又使用if語句以及try-catch,增長了代碼的複雜性。code
try-with-resources使用實例:blog
public void handle(String fileName) { try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { String line; while ((line = reader.readLine()) != null) { ... } } catch (Exception e) { ... } }
能夠看到,try-with-resources的比前一種方法明顯節省了不少代碼,資源在try後邊的()中生成,在try結束後程序會自動關閉資源。接口
若是須要聲明多個資源,能夠在try後面的()中,以;分隔;也就是說,try後邊的()能夠添加多行語句。資源
try (BufferedReader reader1 = new BufferedReader(new FileReader(fileName1));
BufferedReader reader2 = new BufferedReader(new FileReader(fileName2));) {
...
} catch (Exception e) {
...
}get
須要注意的是,try後邊括號中聲明的資源必須實現java.lang.AutoCloseable,若是聲明沒實現這個接口的變量,IDE會進行提示'The resource type File does not implement java.lang.AutoCloseable'。it
好比我在裏面聲明瞭一個File類型的變量:io
參考:class
1.教你消滅 Java 代碼的「壞味道」 : https://mp.weixin.qq.com/s/rGXb_weYLVu0xQ2NmarBlQ
2.Java – Try with Resources : https://www.baeldung.com/java-try-with-resources