Ну, самая сложная часть - статическая инициализация.
Все статические методы и переменные объявляются перед выполнением. Статические методы инициализируются «мгновенно» в том смысле, что вы можете вызывать их в любое время. Затем статические переменные инициализируются в порядке появления. Затем вся статическая инициализация выполняется в порядке появления:
package {
import flash.display.Sprite;
public class Main extends Sprite {
__init(c,'static');//"static initialization b" because all variables are initialized prior to static initialization
public static var a:String = __init(b);//"variable initialization null", because b is declared, but not initialized
public static var b:String = __init('b');//"variable initialization b" for obvious reasons
public static var c:String = __init(b);//"variable initialization b" because b is now initialized
public static function __init(s:String, type:String = 'variable'):String {
trace(type, 'initialization', s);
return s;
}
public function Main():void {}
}
}
Но, в общем, мой совет не полагается на него, если вы действительно не должны.