When I run the following code:
public class Test {
Test(){
System.out.println("1");
}
{
System.out.println("2");
}
static {
System.out.println("3");
}
public static void main(String args[]) {
new Test();
}
}
I expect to get the output in this order:
1
2
3
but what I got is in reverse order:
3
2
1
Can anyone explain why it is output in reverse order?
================
Also, when I create more than one instance of Test
:
new Test();
new Test();
new Test();
new Test();
static block is executed only at first time.
It all depends on the order of execution of initialization statements. Your test demonstrates that this order is:
Edit
Thanks for the comments, now I can quote the appropriate part in the JVM specification. Here it is, the detailed initialization procedure.