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