ASM ガイドでは、コンストラクターについて説明しています。
package pkg; public class Bean { private int f; public int getF() { return this.f; } public void setF(int f) { this.f = f; } }Bean クラスには、コンパイラによって生成されるデフォルトのパブリック コンストラクタもあります。これは、プログラマが明示的なコンストラクタを定義していないためです。このデフォルトの public コンストラクターは として生成され
Bean() { super(); }ます。このコンストラクタのバイトコードは次のとおりです。ALOAD 0 INVOKESPECIAL java/lang/Object <init> ()V RETURN
this最初の命令は、オペランド スタックをプッシュします。2 番目の命令は、この値をスタックからポップし、クラス<init>で定義されたメソッドを呼び出します。Objectこれはsuper()呼び出し、つまりスーパークラスのコンストラクターへの呼び出しに対応しObjectます。ここで、コンストラクターはコンパイル済みクラスとソース クラスで異なる名前が付けられていることがわかります。コンパイル済みクラスではコンストラクターは常に名前が付けられますが、ソース クラスではコンストラクターが<init>定義されているクラスの名前が付けられます。最後に、最後の命令が呼び出し元に戻ります。
thisコンストラクターの最初の命令の前に、JVMは の値をどのように認識していますか?