java类对象的初始化顺序

来源:互联网 发布:移动4g网络优化是干嘛 编辑:程序博客网 时间:2024/06/05 15:20

类对象的初始化顺序
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结果:这里写图片描述