Локальные переменные
— Приветствую, мой любимый ученик! Пришла пора немного серьезнее разобраться в переменных. Но в этот раз обсудим не их внутреннее устройство, а взаимодействие переменных с кодом, в котором они находятся.
— Все переменные, которые объявлены внутри методов, называются локальными переменными. Локальная переменная существует только в том блоке кода, в котором она объявлена. Или, если быть точнее, существует с момента объявления и до конца блока кода, в котором объявлена.
— Мне явно нужен пример.
— Нет проблем. Лови:
Код | Доступность переменных |
---|---|
|
|
— Давай проговорим правила доступности локальных переменных еще разок. Вот есть блок кода. Чем он ограничен?
— Фигурными скобками?
— Верно. Это может быть тело метода, тело цикла или просто блок кода условного оператора. Переменная, объявленная в блоке кода, существует до конца этого блока кода. Ответь, где будет существовать переменная, если её объявить в теле цикла?
— Она и будет существовать только в теле цикла.
— Всё верно. При этом она будет создаваться и уничтожаться на каждом витке цикла.
— Получается, нельзя объявить две локальные переменные с одинаковыми именами в одном методе — программа не скомпилируется. Но можно, если блоки кода, в которых объявлены переменные, не пересекаются.
— Не даром ты мой любимый ученик, Амиго. Держи ещё один пример для закрепления.
Код | Доступность переменных |
---|---|
|
|
— Вторую локальную переменную с именем b
мы смогли объявить только потому, что первая переменная b
не видна в блоке кода, где объявлена вторая переменная b
.
Переменные-параметры
— Как мы уже раньше говорили, у каждого метода могут быть переменные-параметры. А что насчет их видимости и времени жизни?
— Хм… Я завис...
— Тут все довольно просто. Переменные-параметры создаются, когда управление передается в код метода (код метода начинает выполняться), и удаляются, когда работа метода завершается.
— То есть они видны во всем теле метода и только там?
— Да. Пример:
Код | Доступность переменных |
---|---|
|
|
— Как мы уже говорили ранее, args
— это просто переменная типа массив строк. И как и все переменные-параметры, она доступна везде внутри тела метода. Хотя в наших примерах мы ее обычно игнорируем.
Переменные класса
— Вспомни лекции 1-го уровня, где говорилось о том, что класс может содержать функции и переменные. Функции при этом принято называть «методами класса», а переменные — «переменными класса» или «полями класса». Фактически в рамках Java это синонимы.
— Что же такое переменные (или поля) класса?
Переменные класса — это переменные, объявленные не в методе, а в классе.
— А для чего они там?
— Для начала, к ним можно обращаться из любого метода класса. Грубо говоря переменные класса — это общие переменные для всех методов класса.
Пример:
Код | Доступность переменных |
---|---|
|
|
— В этом примере у нас есть два метода — add()
и remove()
. Метод add()
увеличивает переменные класса sum
и count
, а метод remove()
уменьшает переменные sum
и count
. Оба метода работают с общими переменными класса.
— Я всё понял! Локальные переменные существуют, пока выполняется метод. Переменные же класса существуют столько, сколько существует объект класса, к которому они принадлежат.
— Молодец, Амиго. Начало положено, а подробности об объектах класса ты узнаешь на следующем уровне.
Статические переменные
— Переменные класса, как и методы класса, бывают статические и нестатические (обычные). Статические методы могут обращаться только к статическим переменным.
— Со статическими переменными пока всё не очень ясно.
— Понимаю, но ты не переживай. Пока привыкай к ним, присматривайся. На 11-м уровне мы разберем устройство статических переменных и методов и поймем причины таких ограничений.
— Чтобы сделать переменную класса статической, надо перед ее объявлением написать ключевое слово static
.
— Статические переменные привязаны не к объекту класса, в котором они объявлены, а к самому классу. Поэтому они существуют, даже если не создано ни одного объекта типа класса. Обращаться к ним из других классов можно с помощью конструкции вида:
ClassName.variableName
Пример:
Код | Доступность переменных |
---|---|
|
|
— В приведённом выше примере мы создали отдельный класс Storage
, вынесли в него переменные count
и sum
и объявили их статическими. К публичным статическим переменным можно обращаться из любого метода программы (да и не только из метода).
— Хоть и не до конца понимаю, но мне это кажется удобным.
— Так и есть. А иногда это — необходимо, и без “статиков” мы никуда не продвинемся.
— Надеюсь, я постепенно разберусь с ними.
— Да куда ж ты денешься.