对象的初始化过程分为四步,分别为
1、给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量;
2、成员变量声明时的初始化;
3、初始化块初始化(又称为构造代码块或非静态代码块);
4、构造方法初始化
public class Student{
String name;
//思考:执行非静态代码块时,对象已经创建
{
System.out.println(this)
System.out.println("非静态代码块"+this.name);
}
//调用构造函数时,对象已经存在了
public Student(String name){
this.name = name;//在执行这行代码前,对象已经存在,并且有默认值
System.out.println("构造方法"+name);
}
//先调用非静态代码块,再调用构造函数,并且调用非静态代码块时所创建对象的实例属性值为初始化值,或者是默认值(如果没有初始化)
public static void main(String[] args) {
Student student = new Student("李四");
System.out.println(student);
}
}
运行结果
所标记的地方,地址相同,表明是同一个对象,在执行构造方法时,已执行过代码块部分,代码块部分的name有默认值null
下面给一个更细致的代码解释
分析:
先默认值null,0,0,0;
然后声明变量初始值,空,-1,-1,-1;
然后执行非静态代码块部分,雷静,22,2, 4
最后执行构造方法,王云,22,1,4