fo_*_*x86 8 java anonymous-class
在查看一些遗留代码时,我遇到了一些令人困惑的事情:
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)
?我认为它们在功能上是等价的,并且认为后一种方式是更好/更清晰的编写代码的方式.
{ foo(); }
Run Code Online (Sandbox Code Playgroud)
被称为实例初始化器.
为什么?
按照java教程
Java编译器将初始化程序块复制到每个构造函数中.因此,该方法可用于在多个构造函数之间共享代码块.
| 归档时间: |
|
| 查看次数: |
2762 次 |
| 最近记录: |