最近、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