匿名类Java中的匿名代码块

fo_*_*x86 8 java anonymous-class

可能重复:
Java中的Double Brace初始化是什么?

在查看一些遗留代码时,我遇到了一些令人困惑的事情:

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

 public class B{
      public void bar(){
           A a = new A(){ 
                { foo(); }
           }
      }
 }
Run Code Online (Sandbox Code Playgroud)

在调试模式下运行代码后,我发现在{ foo() }调用构造函数后调用匿名块A().上述功能与以下功能有何不同:

 public void bar(){
       A a = new A();
       a.foo();
 }
Run Code Online (Sandbox Code Playgroud)

?我认为它们在功能上是等价的,并且认为后一种方式是更好/更清晰的编写代码的方式.

kos*_*osa 7

 { foo(); }
Run Code Online (Sandbox Code Playgroud)

被称为实例初始化器.

为什么?

按照java教程

Java编译器将初始化程序块复制到每个构造函数中.因此,该方法可用于在多个构造函数之间共享代码块.