AI作成・AIで再検証済(有資格者監修なし)1Z0-815-JPN 対応
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作成・AIで再検証済

解説

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が作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

この問題集の作り方

  1. 問題と解説はAIが作成しています。この資格の問題に、有資格者(著者)の監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  5. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
Java基礎 を含む問題を分野別に演習できます。
演習する →