作用
在执行完内代码后,自动执行其中类的实例实现接口Closeable的close方法,但在finally块之前,一般用于使用完成后关闭IO资源。 新建A、B实现Closeable接口
public class A implements Closeable {
@Override
public void close() throws IOException {
System.out.println("close A");
}
}
public class B implements Closeable {
private A a;
public B(A a) {
this.a = a;
}
@Override
public void close() throws IOException {
System.out.println("close B");
}
}
public static void main(String[] args) {
try (A a = new A();B b = new B(a)) {
System.out.println("inner");
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
}
结果如下:
inner
close B
close A
finally
执行顺序为inner -> (据声明的倒序调用close) -> finally,因此要特别注意资源的关闭顺序
注意
只会自动执行声明实例的close方法,不包括匿名类即new A(),勿用
public static void main(String[] args) {
try (B b = new B(new A())) {
System.out.println("inner");
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
}
结果如下:
inner
close B
finally
|