Недавно я обнаружил то, что мне кажется новым синтаксисом для статической инициализации ArrayList:
новый ArrayList () {{
добавить ("первый");
добавить ("второй");
}};
У меня вопрос, что там на самом деле происходит? Это ярлык для определения статического блока (я думал, ему понадобится ключевое слово 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