rap*_*apt 2 java bytecode-manipulation java-bytecode-asm jvm-bytecode
该ASM引导谈到构造函数:
Run Code Online (Sandbox Code Playgroud)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(); }。该构造函数的字节码如下:Run Code Online (Sandbox Code Playgroud)ALOAD 0 INVOKESPECIAL java/lang/Object <init> ()V RETURN第一条指令压
this入操作数堆栈。第二条指令从堆栈中弹出该值,并调用类中<init>定义的方法Object。这对应于super()调用,即对超类的构造函数的调用Object。您可以在此处看到,在编译类和源类中,构造函数的名称不同:在编译类中,它们总是命名为<init>,而在源类中,它们具有定义它们的类的名称。最后,最后一条指令返回给调用者。
this在构造函数的第一条指令之前,JVM已知的值如何?
在JVM级别上,首先将对象分配,未初始化,然后在该对象上调用构造函数。构造函数或多或少是在未初始化对象上执行的实例方法。
即使使用Java语言,它也this存在,并且其所有字段都位于构造函数的第一行。
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |