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(),会分别放到两个堆栈中执行,各自按照顺序执行。
该文章通过一个示例展示了Java中类的静态块、实例代码块、构造方法的执行顺序。在静态初始化时,先执行父类的静态块,然后是子类的静态块;在创建对象时,先执行父类的实例代码块和构造方法,接着是子类的实例代码块和构造方法。每个类的静态初始化和对象创建都会独立按顺序执行。
1万+

被折叠的 条评论
为什么被折叠?



