gpt4 book ai didi

java - 如果在finally block 内关闭多个资源,是否需要异常处理?

转载 作者:行者123 更新时间:2023-11-30 07:34:25 24 4
gpt4 key购买 nike

一位同事刚刚让我对finally block 感到不安。他声称,如果在finally block 内关闭多个资源,我不必担心异常处理。

所以如果我像这样关闭我的资源

try {
// do stuff
} catch(Exception e) {
// handle stuff
} finally {
resource1.close();
resource2.close();
}

resource1.close()处发生异常,是否会调用resource2的close()方法?

最佳答案

简单的检查即可确认:

class MyResource implements AutoCloseable {
private final String name;
MyResource(String name) { this.name = name; }

@Override public void close() throws IOException {
System.out.println("Closing " + name);
throw new IOException();
}
}

public static void main(String[] args) throws IOException {
MyResource a = new MyResource("a");
MyResource b = new MyResource("b");
try {
} finally {
a.close();
b.close();
}
}

这将打印“Closing a”,然后打印堆栈跟踪; “Closing b”不会被打印。相比之下:

  try (MyResource a = new MyResource("a");
MyResource b = new MyResource("b")) {
}

会打印两者。

关于java - 如果在finally block 内关闭多个资源,是否需要异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35606625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com