动作脚本3:有人可以向我解释静态变量和方法的概念吗?

Mil*_*les 12 actionscript-3

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

bhu*_*ups 27

static指定变量,常量或方法属于类而不是类的实例.static可以在不创建类的实例的情况下访问变量,函数或常量SomeClass.staticVar.它们不是由任何子类继承的,只有类(没有接口)才能拥有静态成员.
一个static函数不能访问任何非静态成员的类(变量,常量或功能),你不能使用thissuper静态函数内部.这是一个简单的例子.

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)

  • 由于其单线程模型,Flash没有线程问题. (5认同)