我做了一个比较,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的类加载顺序表现上是一致的