A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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结束后.再看构造代码块和成员变量的顺序(从上到下的顺序,哪个在上就先执行哪个).

1 个回复

正序浏览
学习学习,顶一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马