类的初始化顺序为:
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 构造函数