Does ActionScript 3 have static initializers like Java?
You bet it does!
First of all, what is a static initializer? Simply put, it’s a block of executable code used to initialise a class. They’re also called “static constructors” in C#.
Here’s a class that detects and stores Flash Player version information:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class FlashPlayerVersion
{
/* Inicializador de Bloque estático */
{
trace("Initialising class FlashPlayerVersion");
var a:Array = Capabilities.version.split(" ");
platform = a[0]; // "WIN", "MAC", "UNIX", etc.
a = a[1].split(",");
majorVersion = int(a[0]);
minorVersion = int(a[1]);
buildNumber = int(a[2]);
internalBuildNumber = int(a[3]);
}
public static var platform:String;
public static var majorVersion:int;
public static var minorVersion:int;
public static var buildNumber:int;
public static var internalBuildNumber:int;
} |
The version information provided by the Capabilities class is in string format, so we need to parse it once. Since the variables holding these values are static, they must be initialised in a static block.
The code in the static block is run when the class is first loaded. You can have multiple static blocks, and they’ll all be executed in the order in which they appear textually within the source.
Here’s a small bit of MXML to test out the FlashPlayerVersion class:
1 2 3 4 5
| <?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Button label="Click Me!"
click="trace('Build number:', FlashPlayerVersion.buildNumber)" />
</mx:Application> |
When you click the button for the first time, the program will trace “Initialising class FlashPlayerVersion” followed by the Flash Player build number. The static initializer is run only once, when the class is first loaded in the virtual machine, which happens when it is first referenced in the application (in our case the click handler).
Original post:manishjethani.com