Actionscript 3 动作脚本3:有人能给我解释一下静态变量和方法的概念吗?

Actionscript 3 动作脚本3:有人能给我解释一下静态变量和方法的概念吗?,actionscript-3,Actionscript 3,我正在学习AS3,对于静态变量或方法的作用,或者它与没有这个关键字的方法或变量的区别,我有点困惑。我认为这应该足够简单,可以回答 static指定变量、常量或方法属于类而不是类的实例静态可以访问变量、函数或常量,而无需创建类的实例,即SomeClass.staticVar。它们不会被任何子类继承,只有类(没有接口)可以有静态成员。一个静态函数不能访问该类的任何非静态成员(变量、常量或函数),并且不能在静态函数内使用this或super。下面是一个简单的例子 public class SomeCl

我正在学习AS3,对于静态变量或方法的作用,或者它与没有这个关键字的方法或变量的区别,我有点困惑。我认为这应该足够简单,可以回答

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