問題タブ [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.

0 投票する
2 に答える
2133 参照

java - コンストラクタのバイトコード

ASM ガイドでは、コンストラクターについて説明しています。

Bean クラスには、コンパイラによって生成されるデフォルトのパブリック コンストラクタもあります。これは、プログラマが明示的なコンストラクタを定義していないためです。このデフォルトの public コンストラクターは として生成され Bean() { super(); }ます。このコンストラクタのバイトコードは次のとおりです。

this最初の命令は、オペランド スタックをプッシュします。2 番目の命令は、この値をスタックからポップし、クラス<init> で定義されたメソッドを呼び出します。Objectこれはsuper() 呼び出し、つまりスーパークラスのコンストラクターへの呼び出しに対応しObjectます。ここで、コンストラクターはコンパイル済みクラスとソース クラスで異なる名前が付けられていることがわかります。コンパイル済みクラスではコンストラクターは常に名前が付けられますが、ソース クラスではコンストラクターが<init>定義されているクラスの名前が付けられます。最後に、最後の命令が呼び出し元に戻ります。

thisコンストラクターの最初の命令の前に、JVMは の値をどのように認識していますか?