我最近发现在我看来是一种静态初始化 ArrayList 的新语法:
new ArrayList() {{
add("first");
add("second");
}};
我的问题是,那里到底发生了什么?这是定义静态块的快捷方式(我认为它需要static
关键字)吗?或者只是一种定义默认构造函数的方法?还有什么?这成为有效的 Java 版本是什么?
一个解释加上进一步阅读的链接将不胜感激。
编辑:我的测试类,用于显示初始化程序块是在构造函数之前还是之后执行,如下所示。结果显示初始化程序块在其他构造函数代码之前执行:
import org.junit.Test;
public class InitializerBlockTest {
class InitializerTest {
{
System.out.println("Running initalizer block");
}
public InitializerTest() {
System.out.println("Running default constructor");
}
}
class SubClass extends InitializerTest {
{
System.out.println("Running subclass Initializer block");
}
public SubClass() {
System.out.println("Running subclass constructor");
}
}
@Test
public void testIt() {
new SubClass();
}
}
输出:
Running initalizer block
Running default constructor
Running subclass Initializer block
Running subclass constructor