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的類加載順序表現上是一致的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章