我能够使用Java语言进行一些实验,令人惊讶的是我开始使用这行代码{{ }}
。更多我已经注意到使用该代码结构,我可以使用该类的任何方法而无需为其创建对象变量。
例如:
class Sample {
public void hello() {
// Do something here.
}
}
class SampleTest {
public void testHello() {
new Sample {{ hello(); }};
}
// PSVM ...
}
问题是为第8行的陈述所要求的概念/术语是什么?
答案 0 :(得分:7)
第一个大括号创建一个新的AnonymousInnerClass,第二个大括号声明在实例化匿名内部类时运行的实例初始化程序块。这种类型的初始化程序块正式称为“实例初始化程序”,因为它是在类的实例范围内声明的 - “静态初始化程序”是一个相关的概念,其中关键字static放在启动块的括号之前,并且一旦类加载器完成加载类(在http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.6处指定),就在类级别执行初始化程序块可以使用包含范围中可用的任何方法,字段和最终变量,但是必须要警惕初始化器在构造函数之前运行(但不在超类构造函数之前)。
如果您想要一些示例,请查看此处:http://c2.com/cgi/wiki?DoubleBraceInitialization
Sarajog