java类库里面有许多需要我们调用close方法来手动关闭的资源。比如InputStream、OutputStream。以往我们通常会使用try-finally来确保资源被关闭。比如:
FileResource resource = new FileResource();
try {
resource.read();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
resource.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这种写法是我们非常熟悉的,为了保证资源最终被关闭,我们通常会在finally里面手动关闭,然后close时又可能会报错,所以我们又加上了try-catch代码块,这样写虽然没啥问题,但是代码看着就会很乱了。
后面,在java7里面引入try-with-resources语句后,这个问题就解决了。首先,要使用这个构造资源,必须弦实现AutoCloseable接口,然后重写里面的close() 方法即可。
首先让我们的类实现AutoCloseable:
public class FileResource implements AutoCloseable {
public void read() {
System.out.println("获取资源");
}
@Override
public void close() throws Exception {
System.out.println("关闭资源");
}
}
接着代码就变成这样了:
try(FileResource resource = new FileResource()) {
resource.read();
} catch (Exception e) {
e.printStackTrace();
}
执行一下看下效果: