public static void main(String[] args) – Java mainメソッド

導入

Javaのmainメソッドは、Javaプログラミングを始める際に最初に学ぶメソッドであり、Javaプログラムの実行エントリーポイントです。 mainメソッドには、実行するコードや他のメソッドを呼び出すコードを含めることができ、プログラムの一部である任意のクラスに配置することができます。 より複雑なプログラムでは、通常、mainメソッドのみを含むクラスがあります。 通常、Mainという名前のクラスを呼び出すだけで、mainメソッドを含むクラスを呼び出すことができます。

以下の例では、mainメソッドを含むクラスはTestと呼ばれています:

Test.java
public class Test {

	public static void main(String[] args){

		System.out.println("Hello, World!");
	
	}
}

この記事では、mainメソッドの各コンポーネントの意味を学びます。

Javaメインメソッドの構文

mainメソッドの構文は常に次のようになります:

public static void main(String[] args){
	// some code
}

String配列の引数の名前のみを変更できます。 たとえば、argsmyStringArgsに変更することができます。 String配列の引数はString... argsまたはString args[]として記述することができます。

public

メインメソッドのアクセス修飾子はpublicである必要があります。これにより、JREはこのメソッドにアクセスして実行することができます。メソッドがpublicでない場合、アクセスが制限されます。次の例のコードでは、メインメソッドにpublicのアクセス修飾子がありません:

Test.java
public class Test {

	static void main(String[] args){

		System.out.println("Hello, World!");
	
	}
}

プログラムをコンパイルして実行すると、次のエラーが発生します。メインメソッドがpublicでないため、JREがそれを見つけることができません:

  1. javac Test.java
  2. java Test
Output
Error: Main method not found in class Test, please define the `main` method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application

static

Javaプログラムが開始されると、クラスのオブジェクトは存在しません。JVMはクラスをメモリにロードし、最初にクラスのインスタンスを作成せずにメインメソッドを呼び出すために、メインメソッドはstaticである必要があります。次の例のコードでは、メインメソッドにstatic修飾子がありません:

Test.java
public class Test {

	public void main(String[] args){

		System.out.println("Hello, World!");
	
	}
}

プログラムをコンパイルして実行すると、次のエラーが発生します。メインメソッドがstaticではないためです:

  1. javac Test.java
  2. java Test
Output
Error: Main method is not static in class Test, please define the `main` method as: public static void main(String[] args)

void

すべてのJavaメソッドは戻り値の型を指定する必要があります。Javaのmainメソッドの戻り値の型はvoidです。なぜなら、何も返さないからです。mainメソッドの実行が終了すると、Javaプログラムは終了するため、戻り値のオブジェクトは必要ありません。以下の例のコードでは、mainメソッドがvoidの戻り値であるにもかかわらず、何かを返そうとしています:

Test.java
public class Test {

	public static void main(String[] args){
	
		return 0;
	}
}

プログラムをコンパイルすると、以下のエラーが発生します。なぜなら、Javaはvoidの戻り値を期待していないからです:

  1. javac Test.java
Output
Test.java:5: error: incompatible types: unexpected return value return 0; ^ 1 error

main

Javaのmainメソッドは常にmainという名前にする必要があります。Javaプログラムが開始すると、常にmainメソッドを探します。以下の例のコードでは、mainメソッドをmyMainに名前を変更しています:

Test.java
public class Test {

	public static void myMain(String[] args){

		System.out.println("Hello, World!");
	}
}

プログラムをコンパイルして実行すると、以下のエラーが発生します。なぜなら、JREがクラス内のmainメソッドを見つけることができないからです:

  1. javac Test.java
  2. java Test
Output
Error: Main method not found in class Test, please define the `main` method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application

String[] args

Javaのmainメソッドは、String配列型の単一の引数を受け取ります。配列内の各文字列はコマンドライン引数です。コマンドライン引数を使用して、プログラムの動作に影響を与えるか、または実行時にプログラムに情報を渡すことができます。以下の例コードでは、プログラムを実行する際に入力するコマンドライン引数を印刷する方法が示されています:

Test.java
public class Test {

	public static void main(String[] args){

    	for(String s : args){
		System.out.println(s);
    	}
	
    }
}

プログラムをコンパイルし、それからいくつかのコマンドライン引数をスペースで区切って実行すると、引数がターミナルに印刷されます:

  1. javac Test.java
  2. java Test 1 2 3 "Testing the main method"
Output
1 2 3 Testing the main method

結論

この記事では、Javaのmainメソッドの各コンポーネントについて学びました。さらにJavaのチュートリアルを使って学習を続けてください。

Source:
https://www.digitalocean.com/community/tutorials/public-static-void-main-string-args-java-main-method