Цитата:
|
как только мы первый раз обращаемся к классу со статическими переменными - ВСЯ его статика сразу же инициализируется.
|
Да истинно так. Советую прочитать avm2 overview многие подобные вопросы отпадут. В частности то что вызывается при первой инициализации называется
cinit и туда свалится весь код инициализации, кроме константных значений некоторых типов, они в структуре класса будут представлены в виде значений по умолчанию.
Причём cinit это обычный метод, туда можно код понаписать:

Код AS3:
class ManagerSkin {
private static var element:MovieClip = Skins.getElement();
trace("hello from cinit");
}
Чтобы это лучше понять можно взять что-нибудь из хороших тулзов для реверсинга и декомпильнуть свой проект. Например
rabcdasm.
Добавлено через 36 минут
Цитата:
|
Инициализация статик классов непредсказуема.
|
Неправда. Очень даже предсказуемо. Инициализация произойдёт в момент первого обращения к типу, т.е. создания переменной, при получении getDefenitionByName и т.п.
Если мы создадим два класса сто статическими полями и кросс ссылками друг на друга то это упадёт в рантайме т.к. во втором сините мы попробуем получить другой тип который ещё не проинитился и вместо него получим null