Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Strange behavior using braces in Java

Tags:

java

braces

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.

like image 486
Eng.Fouad Avatar asked Nov 18 '11 16:11

Eng.Fouad


1 Answers

It all depends on the order of execution of initialization statements. Your test demonstrates that this order is:

  1. Static initialization blocks
  2. Instance initialization blocks
  3. Constructors

Edit

Thanks for the comments, now I can quote the appropriate part in the JVM specification. Here it is, the detailed initialization procedure.

like image 80
Óscar López Avatar answered Oct 02 '22 09:10

Óscar López