Java如何初始化对象
当一个对象被创建之后,虚拟机会为其分配内存,主要用来存放对象的实例变量及其从超类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值。 在内存分配完成之后,java的虚拟机就会开始对新创建的对象执行初始化操作,因为java规范要求在一个对象的引用可见之前需要对其进行初始化。在Java中,三种执行对象初始化的结构,分别是实例初始化器、实例变量初始化器以及构造函数。
代码如下:
public class InstanceInitializer {
private int i = 1;
private int j;
{
j = 2;
}
public InstanceInitializer() {
i = 3;
j = 4;
}
}
编译后的字节码:
aload_0
invokespecial #11; //Method java/lang/Object."<init>":()V //相当于super
aload_0
iconst_1
putfield #13; //Field i:I
aload_0
iconst_2
putfield #15; //Field j:I
aload_0
iconst_3
putfield #13; //Field i:I
aload_0
iconst_4
putfield #15; //Field j:I
return
说明:一创建对象先是开辟空间,构造方法进行初始化,先是通过super调用父类的构造方法给父类进行初始化,等super语句结束后再按照顺序进行初始化,如果构造代码块在前,就先执行.如果是成员变量在前就先默认初始化,然后显示初始化.总而言之以创建对象后先开辟空间,然后是调用本对象对应的构造方法,构造方法最先执行的是super,等super结束后.再看构造代码块和成员变量的顺序(从上到下的顺序,哪个在上就先执行哪个).
|
|