Статические переменные ActionScript 

 

 

При изучении материала предыдущих глав мы немного попрактиковались в  

использовании переменных экземпляра, которые представляют собой переменные, 

связанные с определенным экземпляром класса. В отличие от них, статические 

переменные связаны с самим классом, а не с его определенным экземпляром.  

Статические переменные применяются для хранения информации, относящейся  

логически ко всему классу, в отличие от информации, которая меняется от одного 

экземпляра к другому. Например, в классе, представляющем окно, статическая 

переменная может использоваться для указания размера по умолчанию для новых 

экземпляров этого окна, а в классе, представляющем автомобиль в гоночной игре, 

с помощью статической переменной можно задать максимальную скорость для всех 

экземпляров этого автомобиля. 

Подобно переменным экземпляра, для создания статических переменных  

применяются описания переменных, размещаемые внутри класса, однако описание 

статической переменной должно также*включать атрибут static, как показано 

в следующем обобщенном коде: 

class НекийКласс { 

static var идентификатор = значение; 

Как и в случае с переменными экземпляра, для управления доступностью  

статических переменных в программе можно использовать модификаторы управления 

доступом. Такие модификаторы идентичны модификаторам, применяемым в  

описаниях переменных экземпляра, — public, internal, protected и private. 

Если в описании переменной никакой модификатор не задан, то используется  

модификатор internal (доступ внутри пакета). Указываемый модификатор обычно 

размещается перед атрибутом static, как показано в следующем коде: 

class НекийКласс { 

private static var идентификатор = значение; 

Для доступа к статической переменной указывается имя класса, содержащего  
определение данной переменной, за которым следует точка (.) и имя переменной, как 
показано в следующем обобщенном коде: 
НекийКласс.идентификатор = значение: 
Внутри класса, в котором объявлена данная переменная, имя идентификатор может 
использоваться и самостоятельно (без лидирующего имени класса и точки).  
Например, в классе А, в котором определена статическая переменная v, выражение 
А. v идентично выражению v. Тем не менее, чтобы различать статические  
переменные и переменные экземпляра, многие разработчики (это относится и к примерам 
данной книги) включают лидирующее имя класса даже в тех случаях, когда его 
использование не является обязательным. 
Статические переменные и переменные экземпляра с одинаковыми именами  
могут сосуществовать внутри одного класса. Если в классе А определена переменная 
экземпляра v и статическая переменная с таким же именем, то при вызове в виде 
v идентификатор будет ссылаться на переменную экземпляра, а не на статическую 
переменную. Обратиться к статической переменной можно только путем указания 
лидирующего имени класса: А. v. В этом случае говорят, что переменная  
экземпляра затеняет статическую переменную. 
Теперь добавим несколько статических переменных в наш класс VirtualPet. 
Как известно, статические переменные используются для хранения  
информации, которая логически относится ко всему классу и не меняется от одного 
экземпляра к другому. В нашем классе VirtualPet уже есть два примера  
подобной информации: максимальная длина имени животного и максимальное 
количество калорий, которое может принять данное животное. Для хранения 
этой информации добавим две новые статические переменные: maxNameLength 
и maxCalories. Мы не будем обращаться к нашим переменным за  
пределами класса VirtualPet, поэтому объявим их с использованием  
модификатора доступа private. Следующий код демонстрирует объявления переменных 
maxNameLength и maxCalories, при этом оставшаяся часть кода класса 
VirtualPet опущена ради краткости: 
package zoo { 
internal class VirtualPet { 
private static var maxNameLength = 20; 
private static var maxCalories = 2000; 
// Оставшаяся часть класса не показана... 
Теперь, когда у нас есть переменные maxNameLength и maxCalories, мы можем 
модифицировать методы getHunger ( ), eat ( ) и setName ( ), чтобы  
воспользоваться этими переменными. В листинге 4.1 продемонстрирована последняя версия 
класса VirtualPet, в который были добавлены статические переменные.  
Изменения, внесенные в предыдущую версию кода, выделены полужирным шрифтом. 
Обратите внимание, что по соглашению статические переменные класса  
перечислены перед переменными экземпляра. 
Листинг 4.1. Класс VirtualPet 
package zoo { 
internal class VirtualPet { 
private static var maxNameLength = 20; 
private static var maxCalories = 2000; 
private var petName; 
// Изначально каждому животному дается 50 % от максимально 
// возможного количества калорий. 
private var currentCalories = VirtualPet.maxCalories/2; 
public function VirtualPet (name) { 
setName(name); 
public function eat (numberOfCalories) { 
var newCurrentCalories = currentCalories + numberOfCalories; 
if (newCurrentCalories > VirtualPet.maxCalories) { 
currentCalories = VirtualPet.maxCalories; 
} else { 
currentCalories = newCurrentCalories; 
public function getHunger ( ) { 
return currentCalories / VirtualPet.maxCalories; 
public function setName (newName) { 
// Если длина заданного нового имени больше maxNameLength символов... 
if (newName.length > Virtual Pet.maxNameLength) { 
// ...обрезать имя 
newName = newName.substr@, Virtual Pet.maxNameLength); 
} else if (newName == "") { 
// ...в противном случае, если заданное новое имя является 
// пустой строкой, завершить выполнение метода, не изменяя 
// значения переменной petName 
return; 
// Присвоить новое проверенное имя переменной petName 
petName = newName; 
public function getName ( ) { 
return petName; 
Если проанализировать листинг 4.1, то можно заметить, что наличие  
переменных maxNameLength и maxCalories помогает централизовать код. Например, 
ранее, чтобы изменить максимально допустимое количество символов в имени, 
нам пришлось бы заменить число 20 в двух местах тела метода setName — этот 
процесс не только отнимает много времени, но и может привести к ошибке. Теперь, 
чтобы изменить максимально допустимое количество символов, нужно просто 
присвоить другое значение переменной maxNameLength, и весь класс обновится 
автоматически. 
Статические переменные зачастую используются для хранения установочных  
параметров, значения которых не должны изменяться после запуска программы.  
Чтобы исключить возможность изменения значения переменной, ее нужно объявить 
константой, о чем и пойдет речь в следующем разделе. 




BACK NEXT

Сайт является частным собранием материалов и представляет собой любительский информационно-образовательный ресурс. Вся информация получена из открытых источников. Администрация не претендует на авторство использованных материалов. Все права принадлежат их правообладателям