Possible Duplicate:
What is Double Brace initialization in Java?

While looking at some legacy code I came across something very confusing:

 public class A{
      public A(){ 
          //constructor
      }
      public void foo(){
            //implementation ommitted
      }
 }

 public class B{
      public void bar(){
           A a = new A(){ 
                { foo(); }
           }
      }
 }

After running the code in debug mode I found that the anonymous block { foo() } is called after the constructor A() is called. How is the above functionally different from doing:

 public void bar(){
       A a = new A();
       a.foo();
 }

? I would think they are functionally equivalent, and would think the latter way is the better/cleaner way of writing code.

Edit
Report