Модификатор static в Java: переменные

модификатор_static_java_vertex

Данная статья:

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего "Самоучителя по Java"
Что такое модификатор static

Если Вы читали наши предыдущие статьи, то уже знаете, что модификаторы - это ключевые слова в Java, которые "изменяют и регулируют" работу классов, методов и переменных.

Сегодня мы рассмотрим работу модификатора static - переводится как "статичный", "постоянный", "неизменный". Действительно, его задача - сделать переменную или метод "независимыми" от объекта.

Вам надо знать две основные вещи, которые мы объясним далее:

1. Если метод (переменная) имеет модификатор static, то это значит, что она объявляется для класса. Без этого модификатора - для объектов:

модификатор_static_java_vertex

2. Из-за того, что статический метод/переменная связана с классом, а не объектом (см. пункт 1), их можно вызывать без создания объекта класса.

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

Модификатор static для полей

Принцип 1

Давайте рассмотрим, как работает модификатор static при работе с переменными. Представим, что у нас есть класс Car и класс Test, в котором лежит метод main, из которого мы обращаемся к классу Car:

Представим, что в классе Car лежат две переменные - одна статическая, а другая нет:

Теперь, создадим в нашем главном классе - классе Test - новый объект класса Car:

Давайте теперь обратимся к нашим переменным - статической myStatic и "обычной" notStatic. Мы можем свободно их использовать - например, выводить на экран:

Мы получим:

100

0

А теперь давайте попробуем выполнить тот же код, но уже без создания объекту класса (т.е. вычеркнем строчку "Car myCar = new Car();"):

Код работать не будет, потому что ко второй переменной - notStatic - нельзя обращаться без создания объекта. Но если попробовать вывести только первую переменную - myStatic - код будет правильным:

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

Принцип 2

А теперь, давайте продемонстрирует еще один принцип работы static - переменная с этим модификатором одна для всех  объектов класса.

Итак, представим, что у нас есть тот же класс - Car:

В классе Test увеличим значение статической переменной и выведем её на экран:

Значение переменной myStatic увеличится - и она будет равна 120.

Теперь, создадим новый объект класса Car:

Что случится, если вывести на экран переменные нового объекта c1?

Мы получим:

Статическая переменная c1 = 120;

Не статическая переменная c1 = 0;

То есть не смотря на создание нового объекта, наше статическое поле не изменилось. Но такого бы не произошло с "обычной"переменной notStatic, которая каждый раз создается заново. Посмотрим на следующий код:

Теперь переменные равны 120 и 20. Кроме того, у нас есть новый объект класса Car - c2. Как Вы считаете, чему будет равны переменные myStatic и notStatic для нового объекта?

Результат будет следующим:

Статическая переменная c1 = 120;

Не статическая переменная c1 = 20;

Статическая переменная c2 = 120;

Не статическая переменная c2 = 0;

Видно, что статическая переменная имеет одинаковое значение, а не статическая - разные. Это происходит потому, что не статическая переменная "создается заново" для каждого объекта, а статическая является общей для всех объектов класса.

Константы

Есть еще один способ применения модификатора для полей. Если нужно объявить любую константу - например, модификатор_static_java_vertex = 3,14 - обязательно нужно использовать static. Они объявляются с использованием сочетание "static final":

Недостатки

Помните, что статические методы и переменные доступны вне своего класса. А это значит, что они могут быть "не защищены", и предоставлять нежелательный доступ к данным в программе. Будьте осторожны!

Подводим итог

Итак, Вы теперь знаете, что такое модификатор static и как он применяется при работе с полями. В следующей статье мы рассмотрим его применение в методах.

Напоследок напомним основные постулаты:

1. Статическая переменная объявляется для класса, а не для объекта.

2. Статическую переменную можно вызывать без создания объекта.

3. Все константы являются статическими.

4. При использовании модификатора следует помнить про безопасность элементов программы.

До новых встреч!


Статья написана Vertex Academy. Будем рады видеть Вас на наших курсах Java с нуля.

модификатор_static_java_vertex

FacebookFacebook

FacebookFacebook