【发布时间】:2018-11-09 00:01:02
【问题描述】:
ASM guide 谈论构造函数:
package pkg; public class Bean { private int f; public int getF() { return this.f; } public void setF(int f) { this.f = f; } }Bean 类还有一个默认的公共构造函数,它是 由编译器生成,因为没有定义显式构造函数 由程序员。这个默认的公共构造函数生成为
Bean() { super(); }。这个构造函数的字节码是 以下:ALOAD 0 INVOKESPECIAL java/lang/Object <init> ()V RETURN第一条指令将
this压入操作数堆栈。第二 指令从堆栈中弹出这个值,并调用<init>Object类中定义的方法。这对应于super()调用,即调用超类的构造函数Object。你 可以在这里看到构造函数在编译和 源类:在编译的类中,它们总是被命名为<init>, 而在源类中,它们具有它们所在的类的名称 被定义。最后最后一条指令返回给调用者。
this的值是如何在构造函数的第一条指令之前被JVM知道的?
【问题讨论】:
标签: java java-bytecode-asm bytecode-manipulation jvm-bytecode