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