まめぞうの技術メモ

IT関連で勉強したことをメモします

Javaの「public static void main」とは?

Javaを入門した人がまず書くであろう文言「public static void main」ですが、これは一体何を意味するんでしょうか。

授業や研修でJavaに慣れている人の中にも、意味も分からずこの呪文を書いている人も多いはず。

mainはプログラムの本文

まず大前提として、「public static void main」がmain関数であることは分かりますよね?

main関数が何か分からない人の為に説明すると、main関数は「プログラムの本文」だと思って下さい。

どんなに長くて、沢山のライブラリを読み込むプログラムでも、main関数に書いてあることを実行します。

ライブラリは必要な機能だけを提供する形になります。

java_mainとライブラリの関係

publicはアクセス修飾子

さて、「public static void main」の一番左側についている「public」の部分はアクセス修飾子と言い、この関数をどこから呼ぶことが出来るかを表しています。

この「public」は、全てのクラス・パッケージ・サブクラスからアクセスすることが出来る一番公開範囲の広い設定です。

main関数が外から実行されるものなので、「public」であるのは納得ですね。

他にも、「protected」「設定なし」「private」があります。

  • public……全てのクラスからアクセス可能
  • protected……同じクラス・同じパッケージ・サブクラスからアクセス可能
  • 設定なし……同じクラス・同じパッケージからアクセス可能
  • private……同じクラスのみアクセス可能

staticはインスタンス化せずに使えることを表す

main関数は他のクラスから呼ばれるものではなく、それ自体を実行するものです。

だから、インスタンス化(= new)せずに使える必要があるので、staticがついています。

main関数を呼ぶときにはnewするのではなく、「java プログラム名」しますよね。

voidは戻り値なしを表す

voidは英語で「何もない」という意味です。関数名のすぐ左隣には、関数の戻り値を書きます。

main関数を実行しても何も戻り値はありませんので、voidを定義します。

逆にIntが返ったりStringが返る時は、その型を記載します。

以下がStringが返る関数の例です。

class TestClass{
    public String returnAAA(){
        return "AAA";
    }
}

mainの中の「String args」はコマンドライン引数を表す

最後にmain関数の引数「String args」 の部分ですが、これはコマンドライン引数と言って、「java プログラム名 引数の文言」でプログラムを実行するときの「引数の文言」を受け取ることを表しています。

例えば、以下のプログラムだと、引数の最初の文言を出力します。

public class testCommandLineHikiSuu {
    public static void main(String[] args){
        System.out.println(args[0]);
    }
}

「java testCommandLineHikiSuu Hello」とコマンドを打てば、「Hello」とコンソールに出力されます。

意味を理解してプログラムを書こう

Javaの基本のmain関数の説明でしたが、意外と奥が深いと思いませんか?

日々何気なく書いているコードも、細部まで意味を理解していれば、余計な場所で躓かず、様々に応用が効くと思います。