1. 概要

すべてのプログラムには、実行を開始する場所が必要です。 Javaプログラムについて言えば、それがmainメソッドです。
コードセッション中にmainメソッドを作成することに慣れているため、その詳細にも注意を払っていません。 この簡単な記事では、この方法を分析し、他のいくつかの書き方を示します。

2. 共通の署名

最も一般的なメインメソッドテンプレートは次のとおりです。
public static void main(String[] args) { }

これが私たちが学んだ方法であり、IDEがコードをオートコンプリートする方法です。 しかし、このメソッドが想定できる形式はこれだけではありません。使用できる有効なバリアントがいくつかあり、すべての開発者がこの事実に注意を払っているわけではありません。

これらのメソッドシグネチャに飛び込む前に、共通シグネチャの各キーワードの意味を確認しましょう。

  • public –アクセス修飾子。グローバルな可視性を意味します
  • static –メソッドはクラスから直接アクセスでき、参照を持つためにオブジェクトをインスタンス化して使用する必要はありません。
  • void –このメソッドが値を返さないことを意味します
  • main –メソッドの名前。これは、Javaプログラムの実行時にJVMが検索する識別子です。

args パラメーターは、メソッドが受け取る値を表します。 これは、最初にプログラムを起動するときにプログラムに引数を渡す方法です。

パラメータargsは、Stringの配列です。 次の例では:

java CommonMainMethodSignature foo bar

CommonMainMethodSignature というJavaプログラムを実行し、foobarの2つの引数を渡します。 これらの値は、mainメソッド内でargs[0] foo を値として持つ)および args[1]としてアクセスできます。 (値としてバーを持つ)。

次の例では、引数をチェックして、テストパラメータと本番パラメータのどちらをロードするかを決定しています。

public static void main(String[] args) {
    if (args.length > 0) {
        if (args[0].equals("test")) {
            // load test parameters
        } else if (args[0].equals("production")) {
            // load production parameters
        }
    }
}

IDEはプログラムに引数を渡すこともできることを覚えておくことは常に良いことです。

3. main()メソッドを作成するさまざまな方法

mainメソッドを作成するいくつかの異なる方法を確認してみましょう。 それらはあまり一般的ではありませんが、有効な署名です。

これらはいずれもmainメソッドに固有のものではなく、任意のJavaメソッドで使用できますが、mainメソッドの有効な部分でもあることに注意してください。

角かっこは、一般的なテンプレートのように String の近く、またはいずれかの側のargsの近くに配置できます。

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

引数はvarargsとして表すことができます。

public static void main(String...args) { }

main()メソッドに strictfp を追加することもできます。これは、浮動小数点値を操作するときにプロセッサ間の互換性のために使用されます。

public strictfp static void main(String[] args) { }

synchronizedおよびfinalも、 main メソッドの有効なキーワードですが、ここでは効果がありません。

一方、 finalargsに適用して、配列が変更されないようにすることができます。

public static void main(final String[] args) { }

これらの例を終了するために、上記のすべてのキーワードを使用して main メソッドを作成することもできます(もちろん、実際のアプリケーションでは使用しない可能性があります)。

final static synchronized strictfp void main(final String[] args) { }

4. 複数のmain()メソッドがある

アプリケーション内で複数のメインメソッドを定義することもできます。

実際、これを個々のクラスを検証するための基本的なテスト手法として使用する人もいます(ただし、 JUnit などのテストフレームワークは、このアクティビティにはるかに適しています)。

JVMがアプリケーションのエントリポイントとして実行するmainメソッドを指定するには、MANIFEST.MFファイルを使用します。 マニフェスト内で、メインクラスを示すことができます。

Main-Class: mypackage.ClassWithMainMethod

これは主に、実行可能.jarファイルを作成するときに使用されます。 META-INF / MANIFEST.MF (UTF-8でエンコード)にあるマニフェストファイルを使用して、実行を開始するmainメソッドを持つクラスを示します。

5. 結論

このチュートリアルでは、 main メソッドの詳細と、ほとんどの開発者にあまり一般的ではないものも含めて、想定できるその他の形式について説明しました。

ここで示したすべての例は構文の観点からは有効ですが、それらは教育目的に役立つだけであり、ほとんどの場合、共通の署名を使用して作業を行うことに注意してください。 。