在JDK的FilterOutputStream中看到如下代码段:
public void close() throws IOException {
try (OutputStream ostream = out) {
flush();
}
}
close方法,只有flush而没有close?
不要紧张,仔细观察,这个 try(){} 与以往的 try{} 有点不同。
详解:try-with-resources语法糖(jdk1.7新特性),称为ARM块(Automatic Resource Management),自动资源管理。
1. 该语法结构执行顺序为:
(1)执行try代码块{}中的语句
(2)调用try()小括号中所有对象的close()方法。有多个变量时,由反编译可知,关闭的顺序是逆序关闭即从后往前关闭;try()小括号中的对象类型必须实现 AutoCloseable 接口。
(3)若try块{}异常,则执行catch中的逻辑
(4)若存在finally块,则执行其逻辑