Actionscript 3: кто-то может объяснить мне понятие статических переменных и методов?

glogg можно было также рассмотреть для различного использования:

glogg screenshot

Протест (сообщаемый Simon Tewsi в комментарии , февраль 2013)

Один протест - имеет две поисковых функции, Main Search и Quick Find.
более низкий, который я принимаю, Quick Find, по крайней мере, порядок величины медленнее, чем верхний, который быстр.

12
задан Henk Holterman 15 November 2009 в 18:33
поделиться

2 ответа

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
  }
}
27
ответ дан 2 December 2019 в 03:43
поделиться

Статическая переменная или метод используется всеми экземплярами класса. Это довольно приличное определение, но на самом деле оно может быть не таким ясным, как пример ...

Итак, в классе Foo , возможно, вы ' d хотите иметь статическую переменную fooCounter , чтобы отслеживать, сколько экземпляров Foo было создано. (Пока мы просто проигнорируем безопасность потоков.)

public class Foo {
    private static var fooCounter:int = 0;

    public function Foo() {
        super();
        fooCounter++;
    }

    public static function howManyFoos():int {
        return fooCounter;
    }
}

Итак, каждый раз, когда вы создаете 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
13
ответ дан 2 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: