apart from that static block is invoked at the time of class loading.. run example to get the flow.
package another;
class Parent{ int a = getA();
{
System.out.println("Parent Class Instance Initializer");
}
//here loaded first
static{
System.out.println("initalizer block of parent");
}
public Parent()
{
System.out.println("Parent Class Constructor");
}
private int getA() {
System.out.println("Parent Class Member Initializer");
return 0;
}
}
public class Child extends Parent{
//here loaded second
static{
System.out.println("initalizer block of child");
}
{
System.out.println("Child Class Instance Initializer");
}
int b = getB();
public Child() {
System.out.println("Child Class Constructor");
}
private int getB() {
System.out.println("Child Class Member Initializer");
return 0;
}
public static void main(
String[] args) {
Child c = new Child();
System.out.println("Done");
}
}