Java对流类资源关闭的自动执行

对于流类,有3个相当重要的接口:CloseableFlushableAutoColseable,其中AutoColseable是JDK7新添加的接口,这个接口让我们对流类的异常处理的有了新的写法。

本来对于流类,由于代码出现异常时,异常后面的代码不会被执行,通常会导致后面对资源的关闭操作无法被执行,从而会出现不可预料的错误,因此我们必须把资源关闭的操作写到finally{}里以保证代码会被执行:

1
2
3
4
5
6
7
8
try {
// 1. resource registered
// 2. do something
} catch (IOException e) {
// exception handler
} finally {
// 3. resource close
}

但是Java7为我们优化了对这种问题的处理方式,我们只需把流类资源的申请放到try后面的小括号里即可,不必进行显式的资源关闭,try语句可以自动执行资源关闭,即便在try代码块中发生了异常:

1
2
3
4
5
6
7
try(
// 1. resource registered [auto close]
){
// 2. do something
}catch(IOException e){
// exception handler
}

当然,能使用这种方式的必须是实现了java.lang.AutoCloseable的类。