Что действительно делает {{синтаксис инициализатора ArrayList

Недавно я обнаружил то, что мне кажется новым синтаксисом для статической инициализации 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
5
задан Gus 8 December 2010 в 21:00
поделиться