Статический (ключевое слово)
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2022 г. ) |
В этой статье отсутствует информация об использовании ключевого слова static для объявления методов класса в C++ и Java. ( апрель 2014 г. ) |
В таких языках программирования , как C , C++ , Objective-C и Java , static
— это зарезервированное слово, управляющее как временем жизни (как статической переменной ), так и видимостью (в зависимости от связи ). Эффект ключевого слова варьируется в зависимости от особенностей конкретного языка программирования.
С и С++
[ редактировать ]В C и C++ эффект static
Ключевое слово зависит от того, где встречается объявление.
static
может выступать в качестве класса хранения (не путать с классами объектно-ориентированного программирования ), как и extern
, auto
и register
(которые также являются зарезервированными словами). Каждая переменная и функция имеют один из этих классов хранения; если в объявлении не указан класс хранения, используется контекстно-зависимое значение по умолчанию:
extern
для всех объявлений верхнего уровня в исходном файле,auto
для переменных, объявленных в телах функций.
Класс хранения | Продолжительность жизни | Видимость |
---|---|---|
extern | выполнение программы | внешний (вся программа) |
static | выполнение программы | внутренний ( только единица перевода ) |
auto , register | выполнение функции | (никто) |
В этих языках термин «статическая переменная» имеет два значения, которые легко спутать:
- Переменная с тем же временем жизни, что и программа, как описано выше (независимая от языка); или
- (Специально для семейства C) Переменная, объявленная с классом хранения.
static
.
Переменные с классом хранения extern
, которые включают переменные, объявленные на верхнем уровне без явного класса хранения, являются static
в первом значении, но не во втором.
Статическая глобальная переменная
[ редактировать ]Переменная, объявленная как static
на верхнем уровне исходного файла (вне каких-либо определений функций) виден только во всем этом файле (« область файла », также известная как « внутренняя связь »). В этом случае ключевое слово static
известен как « спецификатор доступа ».
Статическая функция
[ редактировать ]Аналогично, статическая функция – функция, объявленная как static
на верхнем уровне исходного файла (вне каких-либо определений классов) – виден только во всем этом файле (« область файла », также известная как « внутренняя связь »).
Статические локальные переменные
[ редактировать ]Переменные объявлены как static
внутри функции распределяются статически, поэтому сохраняют свое местоположение в памяти на протяжении всего выполнения программы, имея при этом ту же область видимости, что и автоматические локальные переменные ( auto
и register
), что означает, что они остаются локальными для функции. Следовательно, какие бы значения функция ни помещала в свои статические локальные переменные во время одного вызова, они все равно будут присутствовать при повторном вызове функции.
специфичный для C++
[ редактировать ]Статические переменные-члены
[ редактировать ]В C++ переменные-члены, объявленные как static
внутри определений классов являются переменные класса (общие для всех экземпляров класса, в отличие от переменных экземпляра ).
Статическая функция-член
[ редактировать ]Аналогично, статическая функция-член — функция-член, объявленная как static
внутри определения класса – должно относиться ко всем экземплярам класса, а не к какому-либо конкретному экземпляру. Функция-член, объявленная как static
может быть вызван без создания экземпляра класса.
Ява
[ редактировать ]Это ключевое слово static
означает, что этот метод теперь является методом класса ; он будет вызываться через имя класса, а не через объект.
Статический метод обычно называется <classname>.methodname()
, тогда как метод экземпляра обычно вызывается как <objectname>.methodname()
.