このドキュメントでは、Java SE 21プレビュー機能である名前のないクラスおよびインスタンスのmain
メソッドをサポートするためのJava仮想マシン仕様に対する変更について説明します。この機能の概要は、JEP 445を参照してください。
コンパニオン・ドキュメントでは、名前のないクラスおよびインタフェースのmain
メソッドをサポートするためのJava言語仕様に必要な変更について説明します。
変更は、JLSの既存のセクションについて説明しています。新しいテキストはこのように示され、削除されたテキストはこのように示されます。必要に応じて、説明と考察が端の方にグレーのボックスで囲まれて記載されています。
変更ログ:
2023-05-15: 初稿リリース
第5章: ロード、リンクおよび初期化
5.2 Java仮想マシンの起動
Java仮想マシンは、ブートストラップ・クラス・ローダー(5.3.1)またはユーザー定義クラス・ローダー(5.3.2)を使用して初期クラスまたはインタフェースを作成して起動します。次に、Java仮想マシンは、初期クラスまたはインタフェースをリンクして初期化し、(JLS 12.1.4)で説明されているように、public
static
メソッドvoid main(String[])
main
メソッドを起動します。このメソッドを呼び出すと、それ以上の実行がすべて行われます。main
メソッドを構成するJava仮想マシンの命令を実行すると、追加のクラスおよびインタフェースがリンク(および最終的には作成)され、追加のメソッドが呼び出される可能性があります。
初期クラスまたはインタフェースは、実装に依存する方法で指定されます。たとえば、初期クラスまたはインタフェースはコマンドライン引数として指定できます。あるいは、Java仮想マシンの実装自体が、クラス・ローダーを設定し、その後にアプリケーションをロードする初期クラスを提供することもあります。初期クラスまたはインタフェースのその他の選択は、前の段落で示した指定と矛盾しないかぎり可能です。
一方、初期クラスまたはインタフェースのmain
メソッドの呼出しは、実装に依存する方法では指定されませんが、(JLS 12.1.4)に示されている実装に依存しないルールに従って処理されます。