package com.phome.classloader;
public class ClassLoaderDemo2 {
static class A2{
B2 b2 = new B2();
static{
System.out.println("A static");
}
public A2() {
System.out.println("A2()");
}
}
static class B2{
C2 c2 = new C2();
E2 e2 = new E2();
static{
System.out.println("B static");
}
public B2() {
System.out.println("B2()");
}
}
static class C2 extends D2{
static{
System.out.println("C static");
}
public C2() {
System.out.println("C2()");
}
}
static class D2{
static{
System.out.println("D static");
}
public D2() {
System.out.println("D2()");
}
}static class E2{
static{
System.out.println("E static");
}
public E2() {
System.out.println("E2()");
}
}
public static void main(String[] args) {
A2 a2 = new A2();
}
}
执行结果为:
A static
B static
D static
C static
D2()
C2()
E static
E2()
B2()
A2()
总结:
1、自身静态代码块 -> 引用静态代码块 ->父类静态代码块 -> 子类静态代码块 -> 父类构造方法 ->子类构造方法 ->引用构造方法 ->自身构造方法
2、> 主类的静态成员首先初始化。
> 主类的父类的构造方法被调用。
> 主类的非静态对象(变量)初始化。
> 调用主类的构造方法。