Цитата:
|
Переместите items=[item1,item2] в конструктор. Инициализации полей по месту может происходить в неадекватном порядке (хотя именно такой код какой вы привели всегда работал нормально - грешить остаётся только на этот порядок и на 3 вышеприведённых пункта)
|
Хотел бы оспорить данное утвержение, порядок известен и описан в AVM 2 overview и наблюдаем при разборе флешки. Для полей простых типов (числа, строки) инициализация произойдёт до вызова конструктора т.к. эти значения будут сохранены в таблице ностант. Все поля объекта сложных типов будут инициализированы в конструкторе в самом начале, перед вышим кодом. Код их инициализирующий окажется в конструкторе. Можно проверить это при помощи моего любимого rabcdasm. Таким образом можно считать что вся подобная инициализация происходит в конструкторе перед нашим кодом. Возможно что это произойдёт до вызова super(); этого я уже не помню. В данном случае значения не имеет. В случае статических полей произойдёт абсолютно также за исключением того что инициализация произойдёт не в сонструкторе, а в статическом инициализаторе (cinit) и произойдёт это при первом упоминании класса в коде в любом виде.