この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)