初心者向けにやさ〜しく噛み砕いて、main メソッドの意味・書き方・よくある間違い、そして練習問題(解答と解説付き)までまとめます。実機で試せるように、コンパイル/実行コマンドや期待出力も書きます。
1. main メソッドって何?(一言)
プログラムを「スタート」させるための入口(エントリーポイント)です。Javaでプログラムを実行すると、まず main が呼ばれてそこから処理が始まります。
2. 決まりの形(シグネチャ)
public static void main(String[] args) {
// ここに処理を書く
}
Javaこれが 正しい形。順に意味をやさしく説明します。
public:どこからでも呼べます。実行時にJVM(Java仮想マシン)から呼ばれるのでpublicにします。static:インスタンス(newしたオブジェクト)を作らなくても呼べる、クラス単位のメソッドという意味。起動時にまだオブジェクトがないのでstatic必須です。void:返り値(戻り値)がないという意味。main自体は何も返しません(別途System.exitで終了コードを返す方法はあります)。main:メソッド名。正確にmainと書く必要があります(大文字小文字も区別)。(String[] args):文字列の配列を受け取る引数。実行時のコマンドライン引数(例えばjava Hello worldのworld)がここに入ります。
3. 実際の流れ(例)
Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
Javaコンパイルと実行(ターミナル)
javac Hello.java
java Hello
出力:
Hello, Java!
4. コマンドライン引数(args)の使い方
args は String[](文字列配列)。例えば:
public class Greet {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("こんにちは、" + args[0] + "さん!");
} else {
System.out.println("こんにちは、ゲストさん!");
}
}
}
Java実行例:
javac Greet.java
java Greet Taro
出力:
こんにちは、Taroさん!
引数がない場合 args.length == 0 です。
5. よくある「間違い」と対処法
Mainと大文字で書いた → Javaは大文字小文字区別するのでmainと正確に書く。staticを忘れると実行時に「メインメソッドが見つかりません」となる(コンパイルでは通る場合もあるが実行できない)。- シグネチャを変える(引数を
String argsにするなど) → 正しいはString[] args(ただしString args[]でも可)。ただし引数の型や戻り値を変えるとJVMがエントリポイントとして認識しない。 - クラス名とファイル名が違う →
public class HelloはHello.javaにする必要あり。
6. 少し実用的な例:引数で数値を受け取って合計する
public class SumArgs {
public static void main(String[] args) {
int sum = 0;
for (String s : args) {
try {
sum += Integer.parseInt(s);
} catch (NumberFormatException e) {
System.out.println("数値でない引数:" + s + " は無視します。");
}
}
System.out.println("合計: " + sum);
}
}
Java実行例:
javac SumArgs.java
java SumArgs 10 20 5
出力:
合計: 35
7. 練習問題(初心者向け) — 解答・解説付き
問題1
HelloName というクラスを作り、コマンドライン引数で名前を受け取って Hello, <名前>! と表示するプログラムを作ってください。引数が無ければ Hello, World! と表示すること。
解答例
public class HelloName {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("Hello, " + args[0] + "!");
} else {
System.out.println("Hello, World!");
}
}
}
Java実行
javac HelloName.java
java HelloName Alice
出力:
Hello, Alice!
解説:args.length で引数の数を確認。最初の名前は args[0] に入る。
問題2
Multiply を作成。コマンドライン引数で2つの整数を受け取り、それらの積を表示する。引数が2つでない場合は使い方を表示する。
解答例
public class Multiply {
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("使い方: java Multiply <整数1> <整数2>");
return;
}
try {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println("積: " + (a * b));
} catch (NumberFormatException e) {
System.out.println("整数を入力してください。");
}
}
}
Java解説:引数数チェック→ Integer.parseInt で文字列 → 整数へ。例外処理で入力ミスに対応。
問題3(少し発展)
ReverseArgs:受け取ったコマンドライン引数を逆順で表示するプログラムを作成。
解答例
public class ReverseArgs {
public static void main(String[] args) {
for (int i = args.length - 1; i >= 0; i--) {
System.out.print(args[i]);
if (i > 0) System.out.print(" ");
}
System.out.println();
}
}
Java解説:配列の最後からループして順序を反転して表示。
8. デバッグのヒント
- 実行時に「メイン・メソッドが見つかりません」と出るときは、
- クラス名とファイル名が一致しているか、
mainのシグネチャが正しいか(public static void main(String[] args))、- 実行コマンドで正しいクラス名を指定しているか(拡張子
.classは書かない)を確認する。
java実行時はクラスパスやパッケージ構成も影響します(パッケージを指定している場合はjava package.ClassNameのように実行)。
9. まとめ(覚えておくべき最小限)
- Javaプログラムの入口は
public static void main(String[] args)。 argsはコマンドラインからの入力を受け取る配列。javacでコンパイル、javaでクラス名を指定して実行。- よくあるミスは
mainの綴り/大文字小文字、staticの忘れ、ファイル名とクラス名の不一致。
