リソースの変数に再代入する
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
try (Res r = new Res()) {
r = new Res();
}
}
}
class Res implements AutoCloseable {
public void close() { }
}
- A 何も出力されずに終わる
- B 実行時に例外が発生する
- C コンパイルエラーになる
- D
nullと出力される
正解と解説を見る
正解: C
- A: リソース変数は暗黙に final なので、再代入でコンパイルエラーです。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: try-with-resources で宣言した変数 r は暗黙に final なので、r = new Res() はコンパイルエラーになります。
- D: コンパイルエラーなので実行できません。
ポイント
- try-with-resources で宣言した変数は暗黙的に final で、再代入できません。
「try-with-resources 文による例外処理」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)