対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
Gold 保有者 監修1Z0-829 対応
try-with-resources難易度 標準無料

次のコードの出力として正しいものを選べ。

 1  public class Q9 {
 2      static class Res implements AutoCloseable {
 3          String name;
 4          Res(String name) { this.name = name; System.out.println("open " + name); }
 5          public void close() { System.out.println("close " + name); }
 6      }
 7      public static void main(String[] args) {
 8          try (Res a = new Res("A"); Res b = new Res("B")) {
 9              System.out.println("body");
10          }
11      }
12  }
  1. Aopen A / open B / body / close A / close B
  2. Bopen A / open B / body / close B / close A
  3. Copen B / open A / body / close A / close B
  4. Dopen A / open B / close B / close A / body
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:BGold監修

解説

try-with-resources のリソースは宣言順に初期化され(open A → open B)、 try ブロック本体が実行された後(body)、宣言と逆順に close() される(close B → close A)。 JLS §14.20.3 で「リソースは宣言と逆順にクローズされる」と規定されている(後で開いたものを先に閉じる=スタック的解放)。
各誤答が違う理由
  • Aclose が宣言順(A→B)になっている誤り。実際は逆順(B→A)。
  • C初期化(open)も逆順だとした誤り。openは宣言順(A→B)。
  • Dbody より先に close するとした誤り。close は try 本体の完了後。
ひっかけ: open は宣言順・close は逆順。「初期化と解放で順序が逆になる」点。
実機確認の答え合わせ
出力:
open A
open B
body
close B
close A
Gold 保有者による書き下ろし解説・実機で検証済
この分野をもっと解いて、得点源に
try-with-resources を含む全問を分野別に演習できます(無料)。
演習する →