Initialization order of Java classes

public  class ClassInitOrderTest {

    public static void main(String[] args) {
        new B();
    }
}

class T {
    T(int i, String flag) {
        System.out.println(flag + "调用T(" + i + ")");
    }
}

class A {
     static T t1 = new T(1, "base class static field" );
    T t5 = new T(5, "base class field" );

    static {
         new T(2, "Base class static code block" );
    }

    A() {
        new T(6, "Base class constructor" );
    }
}

class B extends A {
     static T t3 = new T(3, "Subclass static field" );
    T t7 = new T(7, "Base class field" );

    static {
         new T(4, "Subclass static code block" );
    }

    B() {
        new T(8, "Subclass Constructor" );
    }
}

 

Base class static field call T(1)
Base class static code block call T(2)
Subclass static field call T(3)
Subclass static code block call T(4)
Base class class field call T(5)
Base class construction Function call T(6)
Base class class field call T(7)
Subclass constructor call T(8)

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324817367&siteId=291194637