7

Java での try-with-resources の例を見ていて、次のことを理解しています。

try (Connection conn = DriverManager.getConnection(url, user, pwd);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(query);) {
  ...
}

したがって、閉じる順序は次のとおりです。

rs.close();
stmt.close();
conn.close();

接続にはステートメントがあり、ステートメントには結果セットがあるため、これは完璧です。

ただし、次の例では、閉じる順序が予想の逆になっていると思います。

例 1:

try (FileReader fr = new FileReader(file);
     BufferedReader br = new BufferedReader(fr)) {
  ...
}

閉店の順番は次のとおりです。

br.close();
fr.close();

例 2:

try (FileOutputStream fos = new FileOutputStream("testSer.ser");
    ObjectOutputStream oos = new ObjectOutputStream(fs);) {
    ...
}

閉店の順番は次のとおりです。

oos.close();
fos.close();

これらの例は正しいですか? これらの例の終了は異なるはずだと思います。理由は次のとおりです。

  1. 例 1 では、BufferedReader に FileReader があります。
  2. 例 2 では、ObjectOutputStream に FileOutputStream があります。
4

2 に答える 2