Actionscript 3 动作脚本3:有人能给我解释一下静态变量和方法的概念吗?
我正在学习AS3,对于静态变量或方法的作用,或者它与没有这个关键字的方法或变量的区别,我有点困惑。我认为这应该足够简单,可以回答Actionscript 3 动作脚本3:有人能给我解释一下静态变量和方法的概念吗?,actionscript-3,Actionscript 3,我正在学习AS3,对于静态变量或方法的作用,或者它与没有这个关键字的方法或变量的区别,我有点困惑。我认为这应该足够简单,可以回答 static指定变量、常量或方法属于类而不是类的实例静态可以访问变量、函数或常量,而无需创建类的实例,即SomeClass.staticVar。它们不会被任何子类继承,只有类(没有接口)可以有静态成员。一个静态函数不能访问该类的任何非静态成员(变量、常量或函数),并且不能在静态函数内使用this或super。下面是一个简单的例子 public class SomeCl
static
指定变量、常量或方法属于类而不是类的实例<代码>静态可以访问变量、函数或常量,而无需创建类的实例,即SomeClass.staticVar
。它们不会被任何子类继承,只有类(没有接口)可以有静态成员。一个
静态函数不能访问该类的任何非静态成员(变量、常量或函数),并且不能在静态函数内使用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";
}
}
在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
}
}
静态变量或方法由类的所有实例共享。这是一个相当不错的定义,但实际上可能没有一个例子那么清楚
因此,在类Foo
中,可能需要一个静态变量fooCounter
来跟踪实例化了多少Foo
。(我们现在将忽略线程安全性)
因此,在上面的示例中,每次创建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
另一件事是静态函数只能访问静态变量,不能被重写,请参见“”。最后一行没有打印11,只将j设置为11:PA使用静态变量/函数的好场景是,如果您正在为类的实例生成唯一id。因为变量属于类,所以可以调用静态方法(增加计数器),然后将其分配给类的实例(最有可能在构造函数中)。这就是我第一次了解它们的方式:)静态关键字的最常用用法是在“单例设计模式”中。由于采用单线程模式,Flash没有线程问题。
var one:Foo = new Foo();
var two:Foo = new Foo();
trace("we have this many Foos: " + Foo.howManyFoos()); // should return 2