外で宣言したリソースを使う
出力はどれか。
public class Main {
public static void main(String[] args) {
Res r = new Res();
try (r) {
System.out.print("use ");
}
System.out.print("end");
}
}
class Res implements AutoCloseable {
public void close() { System.out.print("close "); }
}
- A
use close end - B
use end - C コンパイルエラーになる
- D
use end close
正解と解説を見る
正解: A
- A: Java 9 以降は実質 final の変数を try (r) と書けます。本体の後に close され、その後 end が出力されます。
- B: try (r) と書いたリソースも try の終わりに close されます。
- C: r は実質 final (再代入していない) なので、try (r) の書き方でコンパイルできます。
- D: close は try 文を抜けるときに呼ばれるので、end より前です。
ポイント
- Java 9 から、try の外で宣言した変数を
try (r)のように書けます。ただし final か実質的に final でなければなりません。
「try-with-resources 文による例外処理」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)