我正在学习AS3,对于静态变量或方法的作用,或者它与没有此关键字的方法或变量的区别,我感到有点困惑.我认为这应该足够简单回答.
bhu*_*ups 27
static指定变量,常量或方法属于类而不是类的实例.static可以在不创建类的实例的情况下访问变量,函数或常量SomeClass.staticVar.它们不是由任何子类继承的,只有类(没有接口)才能拥有静态成员.
一个static函数不能访问任何非静态成员的类(变量,常量或功能),你不能使用this或super静态函数内部.这是一个简单的例子.
public class SomeClass
{
private var s:String;
public static constant i:Number;
public static var j:Number = 10;
public static function getJ():Number
{
return SomeClass.j;
}
public static function getSomeString():String
{
return "someString";
}
}
Run Code Online (Sandbox Code Playgroud)
在TestStatic中,可以在不创建SomeClass实例的情况下访问静态变量和函数.
public class TestStaic
{
public function TestStaic():void
{
trace(SomeClass.j); // prints 10
trace(SomeClass.getSomeString()); //prints "someString"
SomeClass.j++;
trace(SomeClass.j); //prints 11
}
}
Run Code Online (Sandbox Code Playgroud)
dus*_*ine 13
静态变量或方法由类的所有实例共享.这是一个相当不错的定义,但可能实际上并没有像一个例子那样明确......
所以在一个类中Foo,你可能想要一个静态变量fooCounter来跟踪Foo实例化的数量.(我们现在暂时忽略线程安全性).
public class Foo {
private static var fooCounter:int = 0;
public function Foo() {
super();
fooCounter++;
}
public static function howManyFoos():int {
return fooCounter;
}
}
Run Code Online (Sandbox Code Playgroud)
所以每次你new Foo()在上面的例子中做出一个,计数器就会增加.因此,如果我们想知道有多少Foo,我们不会问一个实例计数器的值,我们问这个Foo类,因为该信息是"静态的"并适用于整个Foo类.
var one:Foo = new Foo();
var two:Foo = new Foo();
trace("we have this many Foos: " + Foo.howManyFoos()); // should return 2
Run Code Online (Sandbox Code Playgroud)