DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

10章2

このJavaのコードは、try-catch-finallyブロックを使用しています。tryブロック内で何かしらの処理を試み、その処理中に例外が発生した場合はcatchブロックが実行されます。例外が発生しなかった場合はcatchブロックはスキップされます。finallyブロックは、例外の有無に関わらず、tryブロック内の処理の後に必ず実行される部分です。

コードの説明をコメントとして加えます:

public class Main {
  public static void main(String[] args) {
    try {
      // argsが空の配列の場合、"A"を出力します。
      if (args.length == 0) {
        System.out.println("A");
      }
      // argsに値がある場合、何も出力されません。
    } catch (NullPointerException e) {
      // NullPointerExceptionが発生した場合には、"B"を出力します。
      // ただし、このコードではNullPointerExceptionは発生しません。
      System.out.println("B");
    } finally {
      // tryブロックの後、例外が発生していてもいなくても、"C"を出力します。
      System.out.println("C");
    }
    // 最終的にはtryブロック、catchブロック(例外があった場合のみ)、
    // そして必ずfinallyブロックが実行されます。
  }
}
Enter fullscreen mode Exit fullscreen mode

このコードを実行した場合、コマンドライン引数argsが渡されない場合、args.length0になります。したがって、if文はtrueと評価され、"A"が出力されます。その後、finallyブロックが実行され、"C"が出力されます。例外はこのコードでは発生しませんので、catchブロックは実行されません。

したがって、出力は以下のようになります:

A
C
Enter fullscreen mode Exit fullscreen mode

これは選択肢Bに相当します。選択肢の"B"はNullPointerExceptionが発生した場合のみ出力されるため、このコードでは出力されません。選択肢Aの"B"は誤りです。ですから、正しい答えはB、「[A] [C] と表示される」となります。

Top comments (0)