About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Feb

    12

    ActionScript 3 类初始化程序(The Class Initializer,Static Initializers or Static Block),也被称为静态初始化。当AVM虚拟机加载类的时候,类初始化程序是自动创建的,并首先被执行(简单的来说它就好像是一种类的构造函数,但它是针对类的,但不是针对类所产生的实例的)。

    所以类初始化程序只包含静态变量初始化程序和所有类层次的代码,而并不包含实例对象和实例方法。一个类可以含有多个静态块,它们将按出现的顺序被执行。因为我们可以在类初始化程序中给静态变量附值。

    由于AS3类定义的最顶层的代码不是即时编译(JIT)的,因为它们只执行一次。所以类的初始化程序不是即时编译的,它是在解释模式下运行的。由于编译型的代码比解释型的代码执行效率更高,所以当性能是重点时,应当把处理器密集的代码移到类的初始化程序之外。

    样例代码:

    package {
        import flash.system.*;
        import flash.display.MovieClip;
        public class ZineWow extends MovieClip {
            //实例变量test,它不包含在类初始化程序
            public var test:String="test";
            //类层顶代码,它被包含在类初始化程序中
            //由于它将被首先执行,所以前面定义的test在trace中无显示未定义
            //trace(test);
            public function ZineWow () {
                //这里是构造函数,将于类初始化程序后执行
                trace(test);
            }
            //类层顶代码,它被包含在类初始化程序中
            static var theme:String;
            //类层顶代码,它被包含在类初始化程序中,可以向静态变量附值
            theme = "WIN"+"DOWS";
            //类层顶代码,它被包含在类初始化程序中,按顺序执行,所以可以访问到前面的静态变量theme
            trace(theme);
        }
    }

    更多相关参考资料如下:
    Static Initializers or Static Block》;
    Action Script 3's static initializer》;
    Enums and ActionScript's Static Initializers》;
    《Essential ActionScript 3.0》—— Chapter 4. Static Variables and Static —— 4.3.1. The Class Initializer