类的初始化顺序

来源:互联网 发布:淘宝网进入 编辑:程序博客网 时间:2024/05/19 20:42
类的初始化顺序为:
1:static成员变量默认初始化
2:静态块初始化
3:实例成员变量默认初始化
4:实例块初始化
5:构造函数
分析在组合关下,不同情况的初始化顺序:

<1> 在Person的构造函数中对Data进行初始化
class Data{        private int year;        private int month;        private int day;        static{            System.out.println("Data 静态初始化块");        }        {            System.out.println("Data 实例初始化块");        }        public Data(int y,int m,int d){            this.year = y;            this.month = m;            this.day = d;            System.out.println("Data 构造函数");        }}class Person{        private String name;        private int age;        private static int count;        private Data data;                static{            System.out.println("Person 静态初始化块");        }        {            System.out.println("Person 实例初始化块");        }        public Person(){            System.out.println("Person 构造函数");            data = new Data(2017,1,1);        }}public class Main {public static void main(String[] args) {// TODO Auto-generated method stubPerson p1=new Person();}}
代码运行的结果:

Person 静态初始化块
Person 实例初始化块
Person 构造函数
Data 静态初始化块
Data 实例初始化块
Data 构造函数

<2>:Data为Person的实例成员变量初始化顺序
class Data{        private int year;        private int month;        private int day;        static{            System.out.println("Data 静态初始化块");        }        {            System.out.println("Data 实例初始化块");        }        public Data(int y,int m,int d){            this.year = y;            this.month = m;            this.day = d;            System.out.println("Data 构造函数");        }}class Person{        private String name;        private int age;        private static int count;        private Data data=new Data(2017,11,16);                static{            System.out.println("Person 静态初始化块");        }        {            System.out.println("Person 实例初始化块");        }        public Person(){            System.out.println("Person 构造函数");            //data = new Data(2017,1,1);        }}public class Main {public static void main(String[] args) {// TODO Auto-generated method stubPerson p1=new Person();}}

程序运行的结果:

Person 静态初始化块
Data 静态初始化块
Data 实例初始化块
Data 构造函数
Person 实例初始化块
Person 构造函数

<3>Data为Person的静态成员变量初始化顺序:
class Data{        private int year;        private int month;        private int day;        static{            System.out.println("Data 静态初始化块");        }        {            System.out.println("Data 实例初始化块");        }        public Data(int y,int m,int d){            this.year = y;            this.month = m;            this.day = d;            System.out.println("Data 构造函数");        }}class Person{        private String name;        private int age;        private static int count;        private static Data data=new Data(2017,11,16);                static{            System.out.println("Person 静态初始化块");        }        {            System.out.println("Person 实例初始化块");        }        public Person(){            System.out.println("Person 构造函数");            //data = new Data(2017,1,1);        }}public class Main {public static void main(String[] args) {// TODO Auto-generated method stubPerson p1=new Person();}}

运行结果:

Data 静态初始化块
Data 实例初始化块
Data 构造函数
Person 静态初始化块
Person 实例初始化块
Person 构造函数
原创粉丝点击