类的组合:一个类产生的对象是另一个类的成员变量。
类的初始化顺序:
1.static成员变量默认初始化
2.静态块初始化
3.实例成员变量默认初始化
4.实例块初始化
5.构造函数
1和2,3和4 与 代码顺序相关 但是 3,4不会出现在1,2之前
测试一:在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 Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person();
}
}
执行结果:
Person 静态初始化块
Person 实例初始化块
Person 构造函数
Data 静态初始化块
Data 实例初始化块
Data 构造函数
测试二: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,1,1);
static{
System.out.println("Person 静态初始化块");
}
{
System.out.println("Person 实例初始化块");
}
public Person(){
System.out.println("Person 构造函数");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person();
}
}
执行结果:
Person 静态初始化块
Data 静态初始化块
Data 实例初始化块
Data 构造函数
Person 实例初始化块
Person 构造函数
测试三: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,1,1);
static{
System.out.println("Person 静态初始化块");
}
{
System.out.println("Person 实例初始化块");
}
public Person(){
System.out.println("Person 构造函数");
//data = new Data(2017,1,1);
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person();
}
}
执行结果:
Data 静态初始化块
Data 实例初始化块
Data 构造函数
Person 静态初始化块
Person 实例初始化块
Person 构造函数