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!