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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With