I have the following code:
public class Demo{
    public static void main(String[] args) {
        new B();
    }
}
class A {
    static {
        System.out.println("A static initializer block");
    }
    static void methodOfA() {
        System.out.println("A static method");
    }
    {
        System.out.println("A non-static initializer block");
    }
    public A() {
        System.out.println("A constructor");
    }
    public A(String a) {
        System.out.println(a);
    }
}
class B extends A {
    static {
        System.out.println("B static initializer block");
    }
    static void methodOfB() {
        System.out.println("B static method");
    }
    {
        System.out.println("B non-static initializer block");
    }
    public B() {
        super("test");
        System.out.println("B constructor");
    }
}
The output I get is:
A static initializer block
B static initializer block
A non-static initializer block
test
B non-static initializer block
B constructor
But I would expect it to be:
A static initializer block
B static initializer block
A non-static initializer block
B non-static initializer block
test
B constructor
Because, as far as I know, initializer blocks are loaded before the constructor.
I have been browsing google and stackoverflow for an answer but have been unsuccesful.
Any clarification would be much appreciated!
 
     
    