public static void mainってどういう意味なのか教えて~初心者向けJava解説~
プログラミング学習の最初の壁
プログラミングを勉強し始めて一番最初に立ちはだかる壁の一つに、文の構成方法が挙げられます。
プログラミング初心者の皆さんは、「Hello World!」と表示させようと思ったときに最初に何を書けばいいのかわからないという経験をして、その状況を打開するためにこの記事にたどり着いたのではないでしょうか?
今回はそんなあなたの為にこの壁を私が克服した方法をお教えし、みなさんの勉強の助けになれたらうれしいです。
使用するプログラミング言語はJavaとなります。しかし、ここでご紹介するこの壁の克服方法は言語に限らず共通して言えることだと思いますので、ぜひ目を通してみてください。
それではさっそくプログラムの構成がどうなっているのか、一つずつ確認していきましょう。
まだプログラムを実行できる環境が整っていない方は以下の記事を参考にeclipseをインストールし、実行環境を整えてから、この記事に戻ってきていただけると一緒に進むことができるはずです。
プログラミングを始めよう!~Javaを書くための環境を作ろう~
「public static void main(String[] args)」 とは?
public static void main(String[] args)はJavaのプログラムファイルにおいてクラスの宣言の直後に記述される、Mainクラスで一番最初に実行される内容を定義するために使われる宣言です。
何故public static void main(String[] args)と記述するんでしょうか?
一つずつ分解してその意味を解説していきましょう。
皆さん英語を学習するときは
主語(I)動詞(play)目的語(tennis)
という順番で文を作るんだと教わりましたよね。
それに近い形でプログラムを表現するとしたら、
public: 「主語」にあたります。誰でもアクセスできる、という役割を担います。
- 英文の例: 主語の
IやYouのように、誰がその動作をするのかを示します。publicはプログラムの世界では、どこからでもこのメソッドを呼び出せることを意味します。
static: 「動詞」にあたります。このメソッドがクラスのインスタンス(実体)を作らなくても実行できることを意味します。
- 英文の例:
playやrunのように、主語が行う「動作」を示します。staticは、特定のオブジェクトに依存せず、そのクラス自体が持つ機能であることを表します。
void: 「目的語」にあたります。このメソッドは、実行後に何も値を返さないことを示します。プログラム中では「型」が記述されているものになります。
- 英文の例:
tennisやa gameのように、動詞の行為の「対象」や「結果」を示します。voidは、メソッドが何かを返すのではなく、実行するだけで完結する、という「結果」を表します。
main(String[] args): 「補足情報」にあたります。メソッド名が main であり、引数として String 型の配列 args を受け取ることを示します。
- 英文の例:
with my friendsやin the parkのように、動作にまつわる詳細な情報を付け加えます。mainはプログラムの実行開始を意味する「特別な名前」であり、String[] argsは、コマンドラインから受け取った引数を格納するための「受け皿」です。
これではまだまだわかりにくいですね。
ほかにどんな文章があるのか例を交えながら見ていきましょう。
publicの部分を理解する
最初に記述するpublicの部分には以下の4パターンの単語が目的によって使い分けられます。
※但し、mainメソッドではpublicだけが使用されるので注意
public: どこからでもアクセス可能です。protected: 同じパッケージ内、または異なるパッケージでもサブクラスからアクセス可能です。なし(デフォルト/パッケージプライベート): 同じパッケージ内からのみアクセス可能です。private: 定義されたクラス内からのみアクセス可能です。
最初のうちはすべてpublicと記述すればまず間違いはありませんので、何かメソッドを定義するときは「public」を記述しましょう。
問題はここから先になります。メソッドごとにこの先の記述方法に違いが出てきますので、考え方をよく理解して使えるようになっていきましょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// // //publicでの書き出し public void Sound() { System.out.println(this.name + "は、" + this.sound + "と鳴いた"); } //protectedでの書き出し protected void Sound(String volume) { System.out.println(this.name + "は、" + volume + "で鳴いた"); } //冒頭部分なしでの書き出し void SoundAction(String action) { System.out.println(this.name + "は、" + action + "に反応して鳴いた"); } //privateでの書き出し private void SoundVolume(String volume) { System.out.println(this.name + "は、" + volume + "で鳴いた"); } |
staticの部分を理解する
static は、Javaのメソッドやフィールドに適用されるキーワードで、「静的」であることを示します。
- プログラムにおける役割: これは、特定の「モノ(インスタンス)」に紐づく機能ではなく、その「種類(クラス)」自体が持つ機能である、ということを示します。
- 英文の文法上の例え:
public static void main(String[] args)のstaticは、動詞のplayにあたります。- 非
staticの場合: 特定の主語(I)がplayするように、特定のインスタンスがメソッドを実行します。 staticの場合: 主語に依存せず、クラスという「概念」が直接playするようなイメージです。
- 非
非 static と static の違い
この違いをさらに具体的に理解するために、車の例で考えてみましょう。
- 非
staticなメソッド:- 例:
Sound()(鳴くメソッド) - 解説: この動作は、特定の犬(インスタンス)に対して行われるものです。例えば、あなたが持っている赤い車を加速させます。
123456//////Dogインスタンス"d"を生成し、このインスタンスに対してSound()メソッドを呼び出す。Dog d = new Dog(5, "マイケル", "バウバウ!");d.Sound(); // 変数dに入っているマイケルという名前のインスタンスのメソッドを呼び出す//
- 例:
staticなメソッド:- 例:
RunAllDogs()(全ての犬インスタンスが走り出す) - 解説: この動作は、特定のインスタンスではなく、「犬」というクラス全体に対して行われる機能です。
1234////Dog.RunAllDogs(); // Dogクラスのメソッドを直接呼び出す//
- 例:
voidの部分を理解する
この部分は戻り値の型を記述しています。「void」のほかにも、次のような型が記述されます。(例として一部紹介)
当然ながらこの部分を記述し、戻り値の型を指定した場合は「return」文で戻り値を指定しなければエラーとなるのでご注意ください。
int: 数値型で返すboolean: 真偽値型で返すvoid: 何も返さないString: 文字列型で返すdouble: 64ビットの浮動小数点数型で返すDog: Dogクラス型で返す etc...
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//int型で返す public int SanpoHosuu(int kazu) { return kazu; } //真偽値型で返す public boolean Dekita() { return true; } //戻り値なし(return 文がなし) public void Sound() { System.out.println(this.name + "は、" + this.sound + "と鳴いた"); } //”○○は○○と鳴いた”という文字で返す public String Sound(String sound) { return this.name + "は、" + sound + "と鳴いた"; } //double型で受け取った脈拍を返す public double Myakuhaku(double myaku) { return myaku; } // // |
main(String[] args)の部分を理解する。
main(String[] args) は、Java プログラムの実行を開始する地点を意味します。この部分を英文の文法になぞらえると、動詞や目的語を伴って文を完成させるための**「詳細情報」**にあたります。
main(String[] args) の役割
main は、メソッド名が**特別にmainであることから、Javaのプログラムが実行されるときに最初に呼び出されることが約束されています。これは、プログラムがどこから始まるかを示す「玄関」のようなものです。
String[] args は、main メソッドが受け取る「引数」を意味します。
String[]: 文字列の配列であることを示します。args: 引数を意味する arguments の略称で、慣習的に使われる変数名です。
引数を受け取っているのはどこから!?と感じた方は気持ちはわかりますが、ここではそれを理解する必要はありません。
|
1 2 3 4 5 6 7 8 9 |
public class Main { public static void main(String[] args) { // Dogクラスのインスタンスを生成し、Soundメソッドを呼び出す。 Dog d = new Dog(5, "マイケル", "バウバウ!"); d.Sound(); } } |
引数についてわからないという方は
佐々木真氏の「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典|引数
で引数についてまず理解しましょう。直感的になんとなくイメージできればそれで構いません。
まとめ
ここまでJavaの書きだしについて詳しく解説してきましたが、理解できてきたでしょうか?
この書きだしの文法は、多くのJavaプログラムの基盤となります。これから様々なコードを書いていく上で、この部分がなぜ必要なのかを理解していれば、よりスムーズに学習を進めることができるでしょう。
もし、今回の内容をしっかり理解できたら、次は実際にこのメソッドを使って簡単なプログラムを書いてみることから始めてみましょう。


