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) { }
- 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) { }
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
JVM が起動時に呼び出すエントリーポイントは、
各誤答が違う理由public・static・戻り値 void・引数が String[](または可変長引数 String...)という条件をすべて満たすメソッドでなければならない。
- A:条件をすべて満たす標準形。適格。
- B:修飾子
publicとstaticの記述順序は自由(static publicでもpublic staticと同じ意味)。適格。 - C:
staticが無い。JVM はインスタンス生成無しにクラスから直接呼び出すため、staticは必須。不適格(コンパイルは通るが、実行時に「main メソッドが static でない」旨のエラーになる)。 - D:引数が配列でない単一の
String。エントリーポイントの条件を満たさない。不適格。
よって適格なのは A・B。
- C
staticが欠けている。JVM はインスタンスを作らずクラスから直接呼び出すためstaticは必須で、これが無いとエントリーポイントとして認識されない。 - D引数が
String[](配列)やString...(可変長引数)ではなく単一のString。シグネチャが一致しないためエントリーポイントとして認識されない。
ひっかけ: 「修飾子の順序が違うから無効」と早合点しやすいが、
public static と static 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が作成し、独立した検証を経た解説です(有資格者による監修は経ていません)