Javaのエントリーポイントmainメソッドを完全解説!初心者でも理解できる基本ルール
生徒
「Javaプログラムの実行開始点ってどうやって決まるんですか?」
先生
「Javaでは、エントリーポイントと呼ばれる特別なメソッドが決まっています。それがmainメソッドです。今日はそのルールを解説しましょう!」
生徒
「なるほど!どんな条件があるんですか?」
先生
「それでは、基本ルールを具体的な例と一緒に見ていきましょう。」
1. mainメソッドの基本構造とルール
Javaのエントリーポイントであるmainメソッドには、次の条件があります。
- アクセス修飾子は
public: プログラムの外部からアクセスできる必要があります。 staticであること: インスタンスを生成せずに直接呼び出せます。- 戻り値は
void: 値を返す必要がありません。 - メソッド名は
main: 決められた名前である必要があります。 - 引数は
String型の配列: コマンドライン引数を受け取るためです。
以下は正しいmainメソッドの例です。
public class MainExample {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
このコードはJavaプログラムの基本構造であり、JVMはここから実行を開始します。
2. mainメソッドの引数について
mainメソッドの引数はString型の配列ですが、可変長引数を使うこともできます。以下に例を示します。
public class MainWithVarArgs {
public static void main(String... params) {
for (String param : params) {
System.out.println("引数: " + param);
}
}
}
このプログラムでは、java MainWithVarArgs arg1 arg2のように実行すると、コマンドライン引数arg1とarg2が表示されます。
3. mainメソッドの注意点
以下はmainメソッドに関する注意点です。
- 1つのソースファイルに複数の
mainメソッドを定義できますが、それぞれ別のクラスに記述する必要があります。 mainメソッドの戻り値をintや他の型に変更すると、エントリーポイントとして認識されません。- 引数がない
mainメソッドを定義してもJVMは認識しません。
次の例は誤ったmainメソッドです。
public class IncorrectMain {
public static int main(String[] args) {
return 0; // JVMはエントリーポイントとして認識しない
}
}
この場合、プログラムはエラーになります。
4. mainメソッドのまとめ
Javaのmainメソッドは、プログラムの開始点として非常に重要です。アクセス修飾子や戻り値、引数など、ルールを守ることで正しく動作します。これらのルールを意識して、エラーのないプログラムを書く練習をしましょう。
5. なぜ static が必要なのか?
初心者が一番不思議に思うのが static というキーワードです。Javaは本来、クラスから「オブジェクト(実体)」を作って動かす言語ですが、プログラムの開始地点だけは特別です。
もし static が付いていないと、JVM(Java実行環境)はプログラムを動かす前に「まずオブジェクトを作る」という手順が必要になってしまい、卵が先か鶏が先かという問題が発生します。static があるおかげで、JVMは面倒な準備なしに「このクラスのmainをすぐ実行せよ」と命令できるのです。
- 即時実行: インスタンス化の手間を省き、メモリを効率的に使って起動します。
- 注意:
staticメソッド内からは、同じクラスのstaticが付いていない変数やメソッドに直接アクセスできないというルールもセットで覚えておきましょう。
6. コマンドライン引数の受け取り方
main メソッドの引数 String[] args は、プログラム実行時に外部から情報を受け取るための窓口です。これを使うと、プログラムを書き換えなくても動作を切り替えることができます。
例えば、実行時に自分の名前を渡して挨拶させるプログラムは以下のようになります。
public class GreetingMain {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("こんにちは、" + args[0] + "さん!");
} else {
System.out.println("こんにちは、ゲストさん!");
}
}
}
コマンドラインで次のように入力して実行したとします。
java GreetingMain 太郎
こんにちは、太郎さん!
このように、args[0] には最初の単語が格納されます。設定ファイルや処理対象のファイル名を渡す際によく使われる、実戦的な仕組みです。
7. mainメソッドを省略できるケース(JEP 445/463)
2026年現在の最新Java環境では、プログラミング学習のハードルを下げるために「暗黙的に宣言されたクラス」という機能が普及しています。これにより、初心者は public class や String[] args を書かずに、もっとシンプルに書き始めることが可能になりました。
// 最新のJava(プレビュー機能など)で可能な最もシンプルなmain
void main() {
System.out.println("これだけで実行できます!");
}
ただし、実際の現場や多くの教材では、依然として public static void main(String[] args) という厳格な書き方が標準です。基本の形をしっかりマスターした上で、新しい簡略化された書き方があることを知っておくと、学習がよりスムーズに進むでしょう。
まとめ
Javaのmainメソッドはプログラムの実行を開始するためのエントリーポイントです。この記事では、mainメソッドの基本的なルール、引数の取り扱い、注意点を学びました。
public、static、voidという修飾子が必要であり、引数にはString型の配列または可変長引数を指定する必要がある点がポイントでした。
また、複数のmainメソッドを持つことが可能ですが、それぞれ異なるクラスで定義する必要がある点や、間違った形式のmainメソッドはJVMに認識されない点についても確認しました。
以下は正しいmainメソッドの構造をおさらいするための例です。
public class MainExample {
public static void main(String[] args) {
System.out.println("Javaプログラムが開始しました!");
if (args.length > 0) {
System.out.println("コマンドライン引数:");
for (String arg : args) {
System.out.println(arg);
}
} else {
System.out.println("引数はありません。");
}
}
}
上記のコードでは、引数が指定された場合とされなかった場合で異なるメッセージを表示します。このようにmainメソッドを柔軟に活用することで、さまざまなアプリケーションに対応できます。
生徒
「mainメソッドがJavaプログラムのスタート地点だということがよく分かりました!」
先生
「その通りです!特にpublic static voidや引数のString[]の部分は、必ず守るべきルールなので忘れないでください。」
生徒
「引数に可変長引数も使えるんですね。これでコマンドラインから柔軟にデータを受け取れますね。」
先生
「その通りです。次回は、コマンドライン引数を活用した実践的なプログラムを作ってみましょう。」