1

我能够使用 Java 语言进行一些实验,令人惊讶的是,我使用了这行代码{{ }}。此外,我注意到使用该代码结构,我可以使用该类的任何方法,而无需为其创建对象变量。

例如:

class Sample {
   public void hello() {
      // Do something here.
   }
}
class SampleTest {
   public void testHello() {
      new Sample {{ hello(); }};
   }
   // PSVM ...
}

问题是第 8 行语句所要求的概念/术语是什么?

4

1 回答 1

7

第一个大括号创建了一个新的 AnonymousInnerClass,第二个大括号声明了一个实例初始化块,该块在实例化匿名内部类时运行。这种类型的初始化程序块正式称为“实例初始化程序”,因为它是在类的实例范围内声明的——“静态初始化程序”是一个相关概念,其中关键字 static 放在开始块的大括号之前,并且一旦类加载器完成加载类,就会在类级别执行(在http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.6中指定) 初始化程序块可以使用包含范围内可用的任何方法、字段和最终变量,但必须警惕初始化程序在构造函数之前运行(而不是在超类构造函数之前)这一事实。

如果你想要一些例子看这里:http ://c2.com/cgi/wiki?DoubleBraceInitialization

萨拉约格

于 2013-09-09T06:27:02.143 回答