検索

キーワード


【Java】public static void main(String[] args)ってどういう意味? main メソッドの宣言ルール!

  • 公開日:2020-08-26 06:35:52
  • 最終更新日:2021-01-25 16:07:05
【Java】public static void main(String[] args)ってどういう意味? main メソッドの宣言ルール!



こんにちは。駆け出しプログラマーの松倉です!

ここでは、mainメソッドついて紹介・解説します。

プログラミング未経験の方、Javaについて勉強している方、これから勉強したいと思っている方の参考になれば幸いです! 

関連記事リンク:【Java】開発者が読むべき標準ドキュメント【Java】アクセス修飾子の使い分け方は?注意すべき有効範囲と宣言対象【Java】 static の意味や特徴を解説!static修飾子を使用方法も



mainメソッドとは?

mainメソッドとは、Javaのプログラムを実行する場合に必ず必要なメソッドです。

皆さんがコードを書くときはお約束ごととして下記の文を書いています。


mainメソッドの書式

public static void main(String[] args) {
    //実際の処理内容
}

Javaを最初に勉強するとき「コードを書くお約束としてこういうものを書かないといけません。」と教わり、この一文がどういったものなのか詳しくは解説されていないと思います。

しかしこの一文にも意味とルールがあります。


この mainメソッドがない場合、コードを実行するとエラーが返されます。

プログラミングの中で mainメソッドはクラス内で宣言しますが、mainメソッドを宣言したクラスが実行時に最初に呼び出されます。

Javaプログラムでは mainメソッドがプログラムの入り口として実行されるため、mainメソッドを正しく準備しておく必要があります。

この記事では mainメソッドの宣言のルールについて解説をします。



mainメソッドの宣言のルール

mainメソッドの宣言には下記の項目について必ず守らなければならない 5つのルールがあります。

Javaの mainメソッドの宣言では、これらの条件をすべて満たしている必要があります。

  • アクセス修飾子
  • static修飾子
  • 戻り値
  • メソッド名
  • 引数


アクセス修飾子「public static void main(String[] args)」

mainメソッドのアクセス修飾子は" public "であること。

publicはプログラムの公開範囲を意味していおり、public修飾子を付けたメソッドは、メソッドの定義元のクラスの外部、外側のコードからアクセスできるようになります。

別のアクセス修飾子を指定したりすると実行することができません。


static修飾子 「public static void main(String[] args)」

static修飾子を付けたメソッドは、クラスをインスタンス化することなくアクセスできるようになります

staticが付いたメソッドのことを「 static(静的)メソッド」と呼びます。


戻り値 「public static void main(String[] args)」

メソッドの戻り値は" void "であること。

voidはメソッドが呼び出された結果、メソッドの呼び出し元に値を返さない場合に設定する戻り値の型です。


メソッド名 「public static void main(String[] args)」

すべて小文字で" main "であること。

メソッド名であり、JVMが参照する識別子です。


引数 「public static void main(String[] args)

メソッドの引数には" String型の配列 "、または" String型の固定されていない任意の個数となっている引数(可変長引数) "であること。

実行時に指定する引数を mainメソッド内で使用するためです。

" args "はプログラムが実行されるときに渡される情報を意味しています。

argsは、引数を意味する英単語 arguments(引数)を省略したものであり、引数名に一般的によく使われますが、別の引数名でも構いません。


mainメソッドのルールを守った場合と守っていない場合を比較したサンプルコードを確認しましょう。

mainメソッドのルールを守ったクラス

public class Sample1 {
	public static void main(String[] args) {
System.out.println(" Hello World "); } }


実行結果:

Hello World

正しく実行されました。


mainメソッドのルールを守っていないクラス

public class Sample2 {
	void hello() {
		System.out.println(" Hello World ");
	}
}


実行結果:

エラー: メイン・メソッドがクラスcom.sample.Sampleで見つかりません。次のようにメイン・メソッドを定義してください。
   public static void main(String[] args)
またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要があります

このコードを書き終えたときでもコンパイルエラーは発生しません。

しかしプログラムの実行を行うとコンソールに上記のようなエラーが発生します。

これはJavaの実行時に指定したクラスの中にある mainメソッドを呼び出したが、この名前のメソッドが見つからなかったために出るエラーです。

※mainメソッドがある場合でも、staticを記述し忘れた場合にも同じエラーが発生します。



補足

mainメソッドの引数 String[] argsはコマンドライン引数とも呼ばれます。

mainメソッドの String[] argsに対して、引数を設定することができます。

引数を設定することでプログラム起動時に指定したパラメータを外部から受け取ることができます。

そのためプログラムを実行するときにその設定した値に基づき処理を行わせる仕組みを作ることができます

指定方法は eclipceの設定から引数を設定する方法と、コマンドラインから引数を渡す方法の2つがあります。

本記事では eclipceの設定から引数を設定する方法を紹介します。


設定方法と引数を設定する前後でどのように変化するのかサンプルコードで確認しましょう。

public class Sample3 {
	public static void main(String[] args) {
		for (int i = 0; i < args.length; i++) {
			System.out.println(i + "番目:" + args[i]);
		}
	}
}


実行結果:


このようなコードをコマンドライン引数なしで実行した場合、引数 argsには値が設定されていないためコンソールには何も表示されません。


それでは eclipceの設定から引数を設定をしてみましょう。

現在使っているクラスのファイルを右クリックして「実行」→「実行の構成を選択しましょう。

「メインタブ」から「引数タグをクリックし「プログラムの引数」にカーソルを合わせましょう。

「プログラムの引数」のテキストボックスに記載することでコマンドライン引数を設定することができます。

今回は「a b c」と設定し、実行ボタンを選択します。

※設定する文字と文字の間は半角スペースを入れて入力します

   eclipceの設定から引数の設定方法


実行結果:

0番目:a
1番目:b
2番目:c

設定したコマンドライン引数をコンソールに出力することができました。

※コマンドライン引数はすべて文字列で渡されるため、プログラム中で整数や小数などの値として受け取るには変換が必要となることを注意しましょう。


まとめ

今回の記事では mainメソッドについて解説しました。

mainメソッドは必ず必要で最初に実行されるメソッドです。

Javaのプログラミング言語として mainメソッドは文法・実行上の制限などから大きな影響を受けています。

そのため mainメソッドの宣言には必ず守らなければいけないルールがあります。

日頃からこの mainメソッドを定型文のように記述しているかもしれません。

これらのルールを理解して使いこなせるようになるとより理解が深まるきっかけになると思いますよ!


関連記事リンク:【Java】開発者が読むべき標準ドキュメント【Java】アクセス修飾子の使い分け方は?注意すべき有効範囲と宣言対象【Java】 static の意味や特徴を解説!static修飾子を使用方法も

【著者】

松倉祥大

はじめまして。フォワードソフト株式会社の松倉です。
システムエンジニアとして働き始めたのが2020年4月です。経験や知識がない状態で入社した私は、フォワードソフトの教育研修で一からプログラミングの勉強をしました。教育研修を卒業後、Javaのプログラミングについて初学者向けの記事を共同で制作しています。
知識や経験はまだまだですが、これからいろんな職場で様々な経験しながら勉強していきたいと思っています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様