Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В некоторых языках программирования, таких как C (и его близкие потомки, такие как C ++ , Objective-C и Java ), staticэто зарезервированное слово, управляющее как временем жизни (как статическая переменная ), так и видимостью (в зависимости от связи ). Эффект ключевого слова зависит от деталей конкретного языка программирования.

Общее поведение C / C ++ [ править ]

В C и C ++ эффект staticключевого слова в C зависит от того, где происходит объявление.

staticможет действовать как класс хранения (не следует путать с классами в объектно-ориентированном программировании ), как может extern, autoи register(которые также зарезервированные слова). Каждая переменная и функция имеет один из этих классов хранения; если в объявлении не указан класс хранения, используется контекстно-зависимое значение по умолчанию:

  • extern для всех объявлений верхнего уровня в исходном файле,
  • auto для переменных, объявленных в телах функций.

В этих языках термин «статическая переменная» имеет два значения, которые легко спутать:

  1. Переменная с тем же временем жизни, что и программа, как описано выше (не зависит от языка); или же
  2. (Зависит от семейства C) Переменная, объявленная с классом хранения static.

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

Статическая глобальная переменная [ править ]

Переменная, объявленная как staticверхний уровень исходного файла (вне каких-либо определений функций), видна только в этом файле (« область файла », также известная как « внутренняя связь »). В этом случае ключевое слово staticизвестно как « спецификатор доступа ».

Статическая функция [ править ]

Точно так же статическая функция - функция, объявленная staticна верхнем уровне исходного файла (вне каких-либо определений классов) - видна только в этом файле (« область файла », также известная как « внутренняя связь »).

Статические локальные переменные [ править ]

Переменные, объявленные как staticвнутри функции, выделяются статически, таким образом, они сохраняют свое местоположение в памяти на протяжении всего выполнения программы, имея ту же область видимости, что и автоматические локальные переменные ( autoи register), то есть они остаются локальными для функции. Следовательно, любые значения, которые функция помещает в свои статические локальные переменные во время одного вызова, все равно будут присутствовать при повторном вызове функции.

Специально для C ++ [ править ]

Статические переменные-члены [ править ]

В C ++ переменные-члены, объявленные как staticвнутри определений класса, являются переменными класса (совместно используемыми для всех экземпляров класса, в отличие от переменных экземпляра ).

Статический метод [ править ]

Точно так же статический метод  - метод, объявленный как staticвнутри определения класса - предназначен для всех экземпляров класса, а не для любого конкретного экземпляра. Метод, объявленный как, staticможет быть вызван без создания экземпляра класса.

Java [ править ]