类对象的初始化顺序
1.static成员变量默认初始化
2.static块初始化
3.实例成员变量默认初始化
4.实例块初始化
5.构造函数
或
1.static块初始化
2.static成员变量默认初始化
3.实例块初始化
4.实例成员变量默认初始化
5.构造函数
代码测试:
class Date{
private int year;
private int month;
private int day;
//Date静态初始化块
static{
System.out.println("Date static init block!");
}
//Date实例初始化块
{
System.out.println("Date instance init block!");
this.year=year;
this.month=month;
this.day=day;
}
//Data自定义构造函数
public Date(int y,int m,int d){
System.out.println("Date(int, int ,int)");
this.year=y;
this.month=m;
this.day=d;
}
}
class Staff{
private String name;
private int age;
private String sex;
private static int count;//定义成static成员 ,此时它的内存从堆变到方法区
//private Date date;
//测试用例1:
private Date date=new Date(2017,1,7);
//测试用例2:
//private static Date date=new Date(2017,1,7);
//Staff静态初始化块
static{
System.out.println("Staff static init block!");
count=0;
}
//Staff实例初始化块
{
System.out.println("Staff instance init block!");
this.name = "default";
this.age = 0;
this.sex = "default";
count++;
}
//Staff默认构造函数
public Staff(){
System.out.println("Staff(String, int, String, int, int, int)");
}
//Staff自定义构造函数
public Staff(String name, int age, String sex,int y,int m,int d) {
System.out.println("Staff(String, int, String, int, int, int)");
//date =new Date(y,m,d);
this.name = name;
this.age = age;
this.sex = sex;
}
public String toString() {
return "Staff [name=" + name + ", age=" + age + ", sex=" + sex + ", date=" + date + "]";
}
}
public class TestObjectDemo {
public static void main(String[] args) {
Staff p1=new Staff("李敏镐",32,"男",1987,5,18);
}
}
测试用例1结果:
测试用例2结果: