Appearance
Java7 新特性——try-with-resources 用法(AutoCloseable和Closeable)
Java 7 之前的处理
在 Java 7之前,IO 操作为了保证资源能被关闭,往往会在 try 代码块后加上 finally 代码块来处理资源的关闭。
java
public static void testClose(String path){
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(path));
}catch(Exception e){
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
try-with-resources
Java 7新增了try-with-resources语法来保证资源的关闭
java
public static void testAutoClose(String path) {
try(BufferedReader br = new BufferedReader(new FileReader(path));){
}catch(Exception e){
e.printStackTrace();
}
}
BufferedReader 会在代码块里处理完后会被关闭,不需要显式调用 BufferedReader 的 close 方法,也不需要 implements Closeable 或 AutoCloseable 接口。
(也可以自定义 close() 方法:但是需要先 implements Closeable 或 AutoCloseable 接口,然后 @Override close() 方法即可)
注意事项
1.被关闭的资源类需要实现 AutoCloseable 接口,Closeable 接口继承于 AutoCloseable,所以由于 BufferedReader 实现了 Closable 接口,所以可以用 try-with-resources 自动关闭。
2.需要自动关闭的资源在 try 后面的括号里声明。允许声明多个被关闭的资源,关闭的顺序是与创建资源的顺序相反。