Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_ПЯВУ (5 семестр).doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
85.5 Кб
Скачать

19.Что такое статическая переменная класса? Можно ли присвоить статической переменной некоторое значение, когда еще не создано никаких объектов класса?

20.Что такое статическая переменная класса? Возможен ли доступ к статической переменной из объекта класса, в котором она объявлена?

Иногда требуется определить член класса, который должен использоваться

независимо от объекта этого класса. Обычно к члену класса доступ предоставляется через

объект этого класса. Однако можно создать член, который заведомо разрешено

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

член, предварите его объявление ключевым словом static. Если член объявлен как

static, к нему можно получить доступ до создания объектов этого класса и без ссылки на

объект. С использованием ключевого слова static можно объявлять как методы, так и

переменные. В качестве первого примера static-члена приведем метод Main(), который

должен быть вызван операционной системой в начале работы программы.

При использовании static-члена вне класса необходимо указать имя класса и

следующий за ним оператор “точка”. Объект при этом не нужно создавать. К static-

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

чтобы присвоить число 10 static-переменной с именем count, которая является членом

класса Timer, используйте следующую строку кода:

Timer.count = 10; Этот формат подобен тому, что используется для доступа к обычной переменной экземпляра через объект, но здесь вместо имени объекта необходимо указать имя класса. Аналогично можно вызвать и static-метод, т.е. с помощью оператора “точка” после имени класса.

Переменные, объявленные как static-члены, являются по сути глобальными

переменными. При объявлении объектов класса копии static-переменной не создаются,

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

Инициализация static-переменной происходит при загрузке класса. Если инициализатор

явно не указан, static-переменная, предназначенная для хранения числовых значений,

инициализируется нулем; объектные ссылки — null-значениями, а переменные типа bool

— значением false. Таким образом, static-переменная всегда имеет значение.

Различие между static- и обычным методом состоит в том, что static-метод

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

класса.

На static-методы накладывается ряд ограничений.

1. static-метод не имеет ссылки this,

2. static-метод может напрямую вызывать только другие static-методы. Он не

может напрямую вызывать метод экземпляра своего класса. Дело в том, что

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

скажешь о static-методах.

3. static-метод должен получать прямой доступ только к static-данным. Он не

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

экземплярами класса.

Аналогичная проблема возникает при попытке вызвать нестатический метод из static-

метода того же класса. Вот пример:

Важно понимать, что static-метод может вызывать методы экземпляров и

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

объект класса. Другими словами, он не может использовать обычные члены класса без

указания конкретного объекта.