Показать сообщение отдельно
Старый 02.08.2012, 17:58
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 7  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

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