В этой статье отсутствует информация об использовании ключевого слова static для объявления методов класса в C ++ и Java. Апрель 2014 г. ) ( |
В некоторых языках программирования, таких как C (и его близкие потомки, такие как C ++ , Objective-C и Java ), static
это зарезервированное слово, управляющее как временем жизни (как статическая переменная ), так и видимостью (в зависимости от связи ). Эффект ключевого слова зависит от деталей конкретного языка программирования.
Общее поведение C / C ++ [ править ]
В C и C ++ эффект static
ключевого слова в C зависит от того, где происходит объявление.
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
может быть вызван без создания экземпляра класса.
Java [ править ]
Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( Апрель 2020 г. ) |