public class StaticInitOrder {
    static int counter = log("static field initializer");
    int instanceField = log("instance field initializer");

    static { log("static block"); }
    { log("instance block"); }

    StaticInitOrder() { log("constructor"); }

    static int log(String what) {
        System.out.println("  " + what);
        return 1;
    }

    static class Lazy {
        static { log("Lazy class initialised"); }
        static final int CONSTANT = 42;          // compile-time constant: does not trigger init
        static int value = 7;                    // ordinary static: does
    }

    public static void main(String[] args) {
        System.out.println("main starts (static block above already ran)");
        System.out.println("new #1:");
        new StaticInitOrder();
        System.out.println("new #2:");
        new StaticInitOrder();
        System.out.println("reading Lazy.CONSTANT = " + Lazy.CONSTANT);
        System.out.println("reading Lazy.value:");
        System.out.println("  value = " + Lazy.value);
    }
}
