ParentTon
public class Parent {
public static final int P_A = 0;
public static int P_B=0;
public static int P_C;
private static SingleChild obj = new SingleChild();
Parent(){
System.out.println("Parent_Constructor--level--3");
P_B++;
P_C++;
}
{
System.out.println("Parent Code block--level--2");
}
static {
System.out.println("Parent Static block--level--1");
}
}
SingleChild
public class SingleChild extends Parent{
private static SingleChild obj = new SingleChild();
public static int C_A;
public static int C_B = 0;
{
System.out.println("Child code block --level--4");
}
static {
System.out.println("Child static block --level--6");
}
public SingleChild() {
System.out.println("Child_Constructor--level--5");
System.out.println(C_A); // 0
System.out.println(C_B); // 0
C_A++;
C_B++;
}
public static SingleChild getInstance() {
return obj;
}
}
Test
public class TestClassExcuteChian {
public static void main(String[] args) {
System.out.println("C_A="+SingleChild.C_A);
System.out.println("C_B="+SingleChild.C_B);
SingleChild obj1 = SingleChild.getInstance();
SingleChild obj2 = new SingleChild();
System.out.println("P_A="+SingleChild.P_A);
System.out.println("P_B="+SingleChild.P_B);
System.out.println("P_C="+SingleChild.P_C);
}
}
Test result
Parent Code block--level--2
Parent_Constructor--level--3
Child code block --level--4
Child_Constructor--level--5
0
0
Parent Static block--level--1
Parent Code block--level--2
Parent_Constructor--level--3
Child code block --level--4
Child_Constructor--level--5
1
1
Child static block --level--6
C_A=2
C_B=0
Parent Code block--level--2
Parent_Constructor--level--3
Child code block --level--4
Child_Constructor--level--5
2
0
P_A=0
P_B=3
P_C=3
总结
父类的静态块 -- 1, 如果在静态new A(),代码块和构造方法 ,不执行static部分
父类的代码块 -- 2,new A(),同样会执行代码块,级别高于构造方法
父类的构造方法--3,new A() 和初始化时,都会执行
子类的静态块 -- 4,
子类的代码块-- 5
子类的构造方法--6
所有的静态初始化,和new(),会分别放到两个堆栈中执行,各自按照顺序执行。