As some sources say, the Java instance initialization blocks are executed whenever instance is created or right before constructor. But imagine this case:
public
The code is converted by compiler to something like this:
public class Main extends Foo {
void _init()
{System.out.println("Main init");}
public Main()
{
super();
_init();
{System.out.println("Main constr");}
}
}
The main rules are: