先来看道题
问,程序运行的结果是什么 ?
class X {
X() {
System.out.print("X");
}
Y b = new Y();
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X{
Y y = new Y();
Z() {
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
结果是 : YXYZ .
如果能分析的出来,下面的内容也就不用看了.
子父类的初始化过程(分层初始化):
父类初始化 --> 子类初始化
注意 :
虽然子类的构造方法中,默认第一行是super(),
但是,并不表示走完super()后,接着走子类构造方法中的其他内容.
仅仅表示要先初始化父类数据,再初始化子类数据.
也就是说,super()表示的是分层初始化.
类的初始化过程:
(静态变量、静态初始化块)-->(变量、初始化块)--> 构造方法
注意 :
括号内的按写的先后顺序,从上到下初始化
变量的初始化过程是:
默认初始化 --> 显示初始化 --> 构造方法初始化
变量包括:
- 基本数据类型(如, int a = 10;)
- 引用数据类型(如, Student s = new Student();)