AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
main メソッド(コマンドライン引数配列のインデックス)難易度 標準無料

次のコードを java Q7 hello というコマンドで実行した結果として正しいものを選べ。

1  public class Q7 {
2      public static void main(String[] args) {
3          System.out.println(args.length);
4          System.out.println(args[1]);
5      }
6  }
  1. A1 を出力後、ArrayIndexOutOfBoundsException がスローされる
  2. Bコンパイルエラー(args[1] は範囲外なのでコンパイル時に検出される)
  3. C2 改行 hello(クラス名 Q7 も引数として数えられる)
  4. D1 改行 null(存在しない添字は null を返す)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

main の引数 args には、java クラス名後ろに続けて書いたコマンドライン引数だけが渡される(実行対象のクラス名自体は含まれない)。

java Q7 hello では引数は "hello" の1個だけなので、args = {"hello"}args.length = 1。 3行目 args.length の出力は1

4行目 args[1]存在しないインデックス(有効なのは args[0] のみ)。配列の範囲外アクセスはコンパイル時には検出されず、実行時に ArrayIndexOutOfBoundsException がスローされる

各誤答が違う理由
  • B配列の範囲チェックは実行時にしか行われない。コンパイラは args の実際の長さを知り得ないため、この行はコンパイル自体には通る。
  • Cargs に渡されるのはクラス名の後ろの引数のみ。java Q7 hello のクラス名 Q7 は含まれず、args.length は1。
  • D配列の範囲外アクセスは null を返すのではなく例外をスローする。null が返るのは、範囲内だが未代入の参照型要素にアクセスした場合など別の状況。
ひっかけ: 配列の添字が「決め打ちの数値」であっても、範囲チェックは実行時にしか行われない(コンパイル時には配列の実際の長さは分からない)。「存在しない添字を書けばコンパイルエラーになる」という思い込みが罠。
コマンド例と想定される挙動(未実行)
出力と例外:
1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
(3行目の 1 は出力された後、4行目で例外が発生し以降は実行されない)
公式ドキュメント・関連ArrayIndexOutOfBoundsException(SE11 API)
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
Java基礎 を含む問題を分野別に演習できます。
演習する →