AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
main メソッド(有効なシグネチャ)難易度 標準無料

次の4つの main メソッド宣言のうち、JVM がプログラムのエントリーポイントとして正しく認識できるものをすべて選べ(それぞれ独立したクラスに書かれているものとする)。

A  public static void main(String[] args) { }
B  static public void main(String[] args) { }
C  public void main(String[] args) { }
D  public static void main(String args) { }
  1. Apublic static void main(String[] args) { }
  2. Bstatic public void main(String[] args) { }
  3. Cpublic void main(String[] args) { }
  4. Dpublic static void main(String args) { }
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

JVM が起動時に呼び出すエントリーポイントは、publicstatic・戻り値 void・引数が String[](または可変長引数 String...という条件をすべて満たすメソッドでなければならない。

  • A:条件をすべて満たす標準形。適格。
  • B:修飾子 publicstatic記述順序は自由static public でも public static と同じ意味)。適格。
  • Cstatic が無い。JVM はインスタンス生成無しにクラスから直接呼び出すため、static は必須。不適格(コンパイルは通るが、実行時に「main メソッドが static でない」旨のエラーになる)。
  • D:引数が配列でない単一の String。エントリーポイントの条件を満たさない。不適格。

よって適格なのは A・B

各誤答が違う理由
  • Cstatic が欠けている。JVM はインスタンスを作らずクラスから直接呼び出すため static は必須で、これが無いとエントリーポイントとして認識されない。
  • D引数が String[](配列)や String...(可変長引数)ではなく単一の String。シグネチャが一致しないためエントリーポイントとして認識されない。
ひっかけ: 「修飾子の順序が違うから無効」と早合点しやすいが、public staticstatic public意味的に同一で両方適格。逆に「コンパイルが通る=実行できる」も誤り。C・D はコンパイル自体は通ってもJVMのエントリーポイント要件(static・配列引数)を満たさないため java クラス名 で直接実行できない。
コマンド例と想定される挙動(未実行)
A・B:javac 通過・java コマンドで正常起動。
C:javac 通過だが「main メソッドが static でない」旨の実行時エラー(Error: Main method is not static in class クラス名, please define the main method as:)。
D:javac 通過だが「main メソッドが見つからない」旨の実行時エラー(Error: Main method not found in class クラス名, please define the main method as:)=シグネチャが一致しないため。
公式ドキュメント・関連JLS SE11 §12.1.4 Invoke Test.main
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
Java基礎 を含む問題を分野別に演習できます。
演習する →