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类型的变量:
转自:https://www.cnblogs.com/xhj123/p/12578419.html