Javaのエントリーポイントをざっくりまとめてみた[java初心者]
はじめに
こんにちは。
プログラミング初心者Wakinozaと申します。
Java勉強中調べたことを記事にまとめています。
十分気をつけて執筆するつもりが、なにぶん初心者が書いた記事なので、理解が浅い点などあるかと思います。
記事を参考にされる方は、初心者の記事であることを念頭において、お読みいただけると幸いです。
間違い等あれば、指摘いただけると助かります。
対象読者
Javaを勉強中の方。
Java SE Bronze試験を勉強中の方。
mainメソッドの仕様など、Javaの基礎知識を知りたい方。
目次
1. プログラム起動の開始位置
2. mainメソッドの仕様
3. コマンドライン引数
4. JavaSEBronze試験対策の補足情報
本文
1. プログラム起動の開始位置
多くのプログラムは複数の関数やメソッドを持っているため、起動するためには、プログラムの開始位置を示す必要があります。
このプログラムの開始位置は、プログラムによって規定されるのではなく、言語仕様によって規定されています。
開始位置のルールは、言語によっても異なり、大きく2種類に分けられます。
- コードの先頭から始まる言語
- 特定の仕様の関数やメソッドから始まる言語
Python・Ruby・PHPが前者で、Javaをはじめ、C・Goなどが後者にあたります。
開始位置となる「特定の仕様の関数やメソッド」のことを「エントリーポイント」とも言われます。
Javaのエントリーポイントは、「main」メソッドです。
mainメソッドは、文字通りプログラムの起点なので、その仕様は厳密に定められています。
2. mainメソッドの仕様
mainメソッドに適用されるルールは主に5つあり、その全てを満たしていないとmainメソッドと見なされません。
ルールは以下の5つです。
- アクセス制限がpublicであること
- インスタンスがいらないstaticであること
- 戻り値はvoidであること
- メソッド名は「main」(全て小文字)であること
- 引数はString配列型を受け取ること
この5つのルールを満たした記述が、以下の通りです。
public static void main(String[] args){
//何らかのコード
}
このうち「public static void main」の部分は仕様で決まっているため、ほぼ定型文です。
その後の()内はmainメソッドの引数で、「String[]」が引数の型を、「args」が引数の変数名を表します。
ちなみに「args」は、「引数」を意味する英単語argumentsの省略形です。
引数の変数名は、仕様で定められていないため、「args」以外の変数名でも問題ありません。
3. コマンドライン引数
仕様を確認すると、mainメソッドは引数を受け取れるようになっていると言えます。
しかし引数は、通常「呼び出し元のメソッド」が指定するものです。
プログラムで一番最初に起動し、「呼び出し元のメソッド」が存在しないはずのmainメソッドが、なぜ引数を受け取る仕様になっているのでしょう?
それを説明するのが、「コマンドライン引数」です。
(コマンドラインとは、Windowsではコマンドプロンプト、Macではターミナルと呼ばれるあの黒い画面のことです。)
コマンドラインでJavaプログラムを起動するとき、「追加情報」を指定することができます。
この追加情報を「コマンドライン引数」と言います。
プログラム起動時に追加情報があった場合、JVMが追加情報をString配列型に変換し、mainメソッドに引数として渡します。
mainメソッドは、コマンドライン引数を受け取るために、String配列型を引数として受け取る仕様になっているのです。
4. JavaSEBronze試験対策の補足情報
- javaでは、同じシグニチャ(名前と引数のセット)のメソッドを複数記述することができないため、mainメソッドもプログラム内に複数記述することはできません。
- mainメソッドの引数は、String配列型以外に、可変長引数のString型にすることも可能です。可変長引数をコンパイルすると最終的に配列型に変換されるため、可変長引数のString型でもmainメソッドのルールを満たせるのです。
記事は以上です。
最後までお読みいただき、ありがとうございました。
参考文献
この記事は以下の情報を参考にして執筆しました。
- [徹底攻略 Java SE Bronze 問題集]
- [Javaのmainメソッドとは?処理実行のエントリーポイントとなるmainメソッドについて解説](最終更新日 2024-09-01)(https://www.bold.ne.jp/engineer-club/java-main)(参照 2025-03-26)
- [スッキリわかるJava入門 第4版]
Discussion