このJavaのプログラムを分解して、なぜ答えがCなのかを説明します。
まず、プログラムを見てみましょう。
クラス Sample
public class Sample implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("C");
}
}
このクラスはAutoCloseable
インターフェースを実装しており、close
メソッドがオーバーライドされています。このclose
メソッドは、クラスが閉じられるときに呼び出され、「C」を出力します。
クラス Main
public class Main {
public static void main(String[] args) {
try (Sample s = new Sample()) {
throw new Exception();
} catch (Exception e) {
System.out.println("A");
} finally {
System.out.println("B");
}
}
}
ここでは、try-with-resources
文を使用しています。この文では、try
ブロックが終了すると自動的にリソースが閉じられます。
プログラムの実行順序
-
try
ブロックに入る。 -
Sample
クラスのインスタンスを作成し、s
に代入する。 -
try
ブロック内でException
がスローされる。 -
Exception
がスローされると、まずリソース(ここではs
)が閉じられる。このとき、close
メソッドが呼び出され、「C」が出力される。 - その後、
catch
ブロックが実行され、「A」が出力される。 - 最後に、
finally
ブロックが実行され、「B」が出力される。
まとめ
- 最初に
try
ブロック内で例外がスローされると、リソースが閉じられる(close
メソッドが呼び出される)ため、「C」が出力されます。 - その後、
catch
ブロックで「A」が出力されます。 - 最後に
finally
ブロックで「B」が出力されます。
したがって、出力は順に「C」「A」「B」となります。よって、答えはCになります。
Top comments (0)