Java尝试使用资源 - 关闭资源的顺序



在运行以下代码

class MyResource1 implements AutoCloseable {
    public void close() throws IOException {
        System.out.print("1 ");
    }
}
class MyResource2 implements Closeable {
    public void close() throws IOException {
        throw new IOException();
    }
}
public class MapAndFlatMap {
    public static void main(String[] args) {
        try (
                MyResource1 r1 = new MyResource1();
                MyResource2 r2 = new MyResource2();
            ) {
            System.out.print("T ");
        } catch (IOException ioe) {
            System.out.print("IOE ");
        } finally {
            System.out.print("F ");
        }
    }
}

我正在获取以下输出

T IOE 1 F 

,但我期待

T 1 IOE F

即使更改了尝试的资源顺序,例如以下

MyResource2 r2 = new MyResource2();
    MyResource1 r1 = new MyResource1();

输出没有变化。在我的理解中,资源将以其声明的相反方向关闭。它正确吗?

这是一种记录的行为:"以其创建的相反顺序调用资源的关闭方法"

最新更新