AS3.0中类初始化的顺序

我做了一个比较,java中有静态初始化块的概念(as3中是没有的),格式如下:

static {

//TODO….

}

关于java中类的初始化顺序,我想只要随便搜索一下,将有超过十万的结果出来

这里侧重点在as3的代码

在同一包下若有三个类:

main.as<用于测试>

Parent.as 父类

SubClass.as 子类

其中SubClass继承至Parent

image

父类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();
		}
		
	}
	
}

这里有个问题就是,在调用类的构造函数时,类中的变量才被初始化

运行的结果显示如下:

父类--静态变量
子类--静态变量
父类--变量
父类--构造器
子类--变量
子类--构造器

image

as3中类的初始化顺序与java基本上是相同(除了as3中没有静态块的概念外):

(1)当类被加载时,该类的静态属性和方法会被初始化

(2)初始化成员变量

(3)调用构造器

而java中:

image

运行的结果:

  • 父类--静态变量
  • 父类--静态初始化块
  • 子类--静态变量
  • 子类--静态初始化块
  • 父类--变量
  • 父类--初始化块
  • 父类--构造器
  • 子类--变量
  • 子类--初始化块
  • 子类--构造器
  • 如果去除”静态初始化块”

    那么java与as3的类加载顺序表现上是一致的

    原文地址:https://www.cnblogs.com/meteoric_cry/p/1902583.html