try-with-resources是jdk1.7加入的機制,可以保證資源使用后正常關閉,並使代碼更加簡潔。
try-catch-finally使用實例:
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,增加了代碼的復雜性。
try-with-resources使用實例:
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) {
...
}
需要注意的是,try后邊括號中聲明的資源必須實現java.lang.AutoCloseable,如果聲明沒實現這個接口的變量,IDE會進行提示'The resource type File does not implement java.lang.AutoCloseable'。
比如我在里面聲明了一個File類型的變量:

參考:
1.教你消滅 Java 代碼的“壞味道” : https://mp.weixin.qq.com/s/rGXb_weYLVu0xQ2NmarBlQ
2.Java – Try with Resources : https://www.baeldung.com/java-try-with-resources
