AS3.0中类初始化的顺序

简介: 我做了一个比较,java中有静态初始化块的概念(as3中是没有的),格式如下: static { //TODO…. } 关于java中类的初始化顺序,我想只要随便搜索一下,将有超过十万的结果出来   这里侧重点在as3的代码   在同一包下若有三个类: main.

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

目录
相关文章
|
3月前
|
C++
成员初始化表的执行顺序与顺写顺序无关
成员初始化表的执行顺序与顺写顺序无关
25 0
|
8月前
|
Java Kotlin
Kotlin 中初始化块、初始化的顺序、lateinit延迟初始化详解
Kotlin 中初始化块、初始化的顺序、lateinit延迟初始化详解
57 0
|
编译器 C++
C++类对象构造顺序
C++类对象构造顺序
38 0
C++类对象构造顺序
|
存储
循环内不要不断创建对象引用
循环内不要不断创建对象引用
156 0
|
架构师 Java Spring
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑(下)
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑(下)
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑(下)
|
Java 编译器 Spring
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑(上)
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑(上)
类、变量、块、构造器、继承初始化顺序,终极解答。
最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量、成员变量、静态代码块、非静态代码块、构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导。
类、变量、块、构造器、继承初始化顺序,终极解答。
有继承关系的对象执行顺序,包括静态变量,静态代码块,普通变量,普通代码块,继承方法.
static最先执行,如果生成的是子类对象,则先会去父类中寻找,如果也有static变量或static代码块,则先执行父类中的. 其次再执行了父类的普通变量和普通代码块+父类的构造函数. --- >  再其次才是子类的普通变量和普通代码块+子类的构造函数. 而如果调用方法,在子类中有覆盖父类的同方法时,只执行子类的方法.而不会再使用父类被覆盖掉的.将编程看作是一门艺术,而不单单是个技术。
789 0