AS3.0中类初始化的顺序
我做了一个比较,java中有静态初始化块的概念(as3中是没有的),格式如下:
static {
//TODO….
}
关于java中类的初始化顺序,我想只要随便搜索一下,将有超过十万的结果出来
这里侧重点在as3的代码
在同一包下若有三个类:
main.as<用于测试>
Parent.as 父类
SubClass.as 子类
其中SubClass继承至Parent
父类Parent.as的代码:
package { public class Parent { public static var p_StaticField:String = "父类--静态变量"; public var p_field:String = "父类--变量"; public function Parent() { trace(p_field); trace('父类--构造器'); } trace(p_StaticField); } }
子类SubClass.as的代码:
package { public class SubClass extends Parent { public static var s_StaticField:String = "子类--静态变量"; private var s_field:String = "子类--变量"; public function SubClass() { trace(s_field); trace('子类--构造器'); } trace(s_StaticField); } }
测试类Main.as的代码:
package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point new SubClass(); } } }
这里有个问题就是,在调用类的构造函数时,类中的变量才被初始化
运行的结果显示如下:
父类--静态变量
子类--静态变量
父类--变量
父类--构造器
子类--变量
子类--构造器
as3中类的初始化顺序与java基本上是相同(除了as3中没有静态块的概念外):
(1)当类被加载时,该类的静态属性和方法会被初始化
(2)初始化成员变量
(3)调用构造器
而java中:
运行的结果:
如果去除”静态初始化块”
那么java与as3的类加载顺序表现上是一致的