1、加载源代码。父类->基类
2、分配静态成员变量并进行默认初始化;调用静态初始化代码块进行显式初始化。基类->父类
3、分配成员变量并进行默认初始化;调用构造方法进行显式初始化。基类->父类
注:第1和2步骤加载类,第3步骤加载对象;加载对象时,查看对应的类是否已加载,是则加载对象,否则,先加载类,再加载对象。
class Base {
protected static String str;
protected static void printStr() {
System.out.println(str);
}
static {
printStr();
str = "[static block]:Base!";
}
public Base() {
printStr();
str = "[construct block]:Base!";
}
}
public class Derived extends Base {
static {
printStr();
str = "[static block]:Derived!";
}
public Derived() {
printStr();
str = "[construct block]:Derived!";
}
public static void main(String[] args) {
new Derived();
printStr();
}
}