Initialization block execution order, static initialization block constructor

package com.ocr;

class A {
    static {
        System.out.println("Static init A.");
    }

    {
        System.out.println("Instance init A.");
    }

    A() {
        System.out.println("Constructor A.");
    }
}

class B extends A {
    static {
        System.out.println("Static init B.");
    }

    {
        System.out.println("Instance init B.");
    }

    B() {
        System.out.println("Constructor B.");
    }
}

class C extends B {

    static {
        System.out.println("Static init C.");
    }

    {
        System.out.println("Instance init C.");
    }

    C() {
        System.out.println("Constructor C.");
    }
}

public class Main {

    static {
        System.out.println("Static init Main.");
    }

    {
        System.out.println("Instance init Main.");
    }

    public Main() {
        System.out.println("Constructor Main.");
    }

    public static void main(String[] args) {
        C c = new C();
        // B b = new B();
    }
}

Results of the

Static init Main.
Static init A.
Static init B.
Static init C.
Instance init A.
Constructor A.
Instance init B.
Constructor B.
Instance init C.
Constructor C.

Conclusion: static block of code in preference to say that there is a block of code execution, and executed from the top parent

Constructor> subclass - parent class static block of code -> subclass static block of code -> parent class constructor code blocks -> parent class constructor -> subclass code block configured: Sequence

 

Guess you like

Origin www.cnblogs.com/xyzxy/p/12592250.html