次のテキストを理解できません...それ<clinit>
は空のコンストラクターのためのものですか?2つの異なるバージョンを持つことが重要なのはなぜですか?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
Java仮想マシンのレベルでは、すべてのコンストラクター(2.12)は、特別な名前を持つインスタンス初期化メソッドとして表示されます
<init>
。この名前はコンパイラによって提供されます。名前<init>
は有効な識別子ではないため、Javaプログラミング言語で作成されたプログラムで直接使用することはできません。インスタンス初期化メソッドは、invokespecial命令によってJava仮想マシン内でのみ呼び出すことができ、初期化されていないクラスインスタンスでのみ呼び出すことができます。インスタンス初期化メソッドは、それが派生したコンストラクターのアクセス許可(§2.7.4)を引き継ぎます。クラスまたはインターフェースは最大で1つのクラスまたはインターフェース初期化メソッドを持ち、そのメソッドを呼び出すことによって初期化されます(§2.17.4)。クラスまたはインターフェースの初期化メソッドは静的であり、引数を取りません。それは特別な名前を持ってい
<clinit>
ます。この名前はコンパイラによって提供されます。名前<clinit>
は有効な識別子ではないため、Javaプログラミング言語で作成されたプログラムで直接使用することはできません。クラスおよびインターフェースの初期化メソッドは、Java仮想マシンによって暗黙的に呼び出されます。Java仮想マシンのinw2structionから直接呼び出されることはありませんが、クラス初期化プロセスの一部として間接的にのみ呼び出されます。
CL
略ですか?