代码之家  ›  专栏  ›  技术社区  ›  dileepVikram

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

  •  1
  • dileepVikram  · 技术社区  · 7 年前

    运行以下代码时

    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();
    

    产量没有变化。据我所知,资源将按照其声明的相反方向关闭。是否正确?

    1 回复  |  直到 7 年前
        1
  •  4
  •   wfranczyk    7 年前