Java SE -类的初始化顺序

类的初始化顺序为:
		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 stub
		Person 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 stub
		Person 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 stub
		Person p1=new Person();
	}

}


运行结果:

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

猜你喜欢

转载自blog.csdn.net/hao_0802/article/details/78556074