問題タブ [jvm-bytecode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - コンストラクタのバイトコード
ASM ガイドでは、コンストラクターについて説明しています。
Bean クラスには、コンパイラによって生成されるデフォルトのパブリック コンストラクタもあります。これは、プログラマが明示的なコンストラクタを定義していないためです。このデフォルトの public コンストラクターは として生成され
Bean() { super(); }
ます。このコンストラクタのバイトコードは次のとおりです。
this
最初の命令は、オペランド スタックをプッシュします。2 番目の命令は、この値をスタックからポップし、クラス<init>
で定義されたメソッドを呼び出します。Object
これはsuper()
呼び出し、つまりスーパークラスのコンストラクターへの呼び出しに対応しObject
ます。ここで、コンストラクターはコンパイル済みクラスとソース クラスで異なる名前が付けられていることがわかります。コンパイル済みクラスではコンストラクターは常に名前が付けられますが、ソース クラスではコンストラクターが<init>
定義されているクラスの名前が付けられます。最後に、最後の命令が呼び出し元に戻ります。
this
コンストラクターの最初の命令の前に、JVMは の値をどのように認識していますか?