— Привет, мой любимый ученик. Сейчас я расскажу тебе о видимости переменных.

— А что, бывают и невидимые переменные?

— Нет, под «видимостью переменных» подразумевают места в коде, где к этой переменной можно обратиться. К некоторым переменным можно обращаться отовсюду в программе, к другим только в пределах их класса, к третьим же только внутри одного метода.

— Например, ты не можешь обратиться к переменной раньше, чем она объявлена.

— Логично.

— Вот несколько примеров:


public class Variables

{
   private static String TEXT = "The end.";
  ┗━━━━━━━━━━━━━━┛
   public static void main (String[] args)
                          ┗━━━━━━━┛
  {
     System.out.println("Hi");
     String s = "Hi!";
   ┏┗━━━━┛
    System.out.println(s);
    if (args != NULL)
    {
       String s2 = s;
      ┗━━━━┛
   
      System.out.println(s2);
     
    }
    Variables variables = new Variables();
    System.out.println(variables.classVariables);
    System.out.println(TEXT);
   
  }
 
   public String classVariables;
  ┗━━━━━━━━━━━━━━━┛
   public Variables()
   {
      classVariables = "Class Variables test.";
   }
}

1. Переменная, объявленная в методе, существует/видна с начала объявления до конца метода.

2. Переменная, объявленная в блоке кода, существует до конца этого блока кода.

3. Переменные — аргументы метода — существуют везде внутри метода.

4. Переменные класса/объекта существуют все время жизни содержащего их объекта. Их видимость дополнительно регулируется специальными модификаторами доступа: public, private.

5. Статические переменные классов существуют все время работы программы. Их видимость также определяется модификаторами доступа.

— Обожаю картинки, на них все всегда понятно.

— Молодец, Амиго. Всегда знал, что ты сообразительный малый.

— Еще расскажу тебе про «модификаторы доступа». Да не пугайся ты так, ничего сложного в них нет. Это слова public и private, которые ты видишь.

— А я и не пугаюсь – это у меня глаз дергается.

— Верю, верю. Ты можешь управлять доступом (видимостью) методов и переменных твоего класса из других классов. Каждому методу или переменной можно указывать только один модификатор доступа.

1 Модификатор «public».

К переменной, методу или классу, помеченному модификатором public, можно обращаться из любого места программы. Это самая высокая степень открытости — никаких ограничений нет.

2 Модификатор «private».

К переменной или методу, помеченному модификатором private, можно обращаться только из того же класса, где он объявлен. Для всех остальных классов помеченный метод или переменная — невидимы и «как бы не существуют». Это самая высокая степень закрытости – только свой класс.

3 Без модификатора.

Если переменная или метод не помечены никаким модификатором, то считается, что они помечены «модификатором по умолчанию». Переменные или методы с таким модификатором (т.е. вообще без какого-нибудь) видны всем классам пакета, в котором они объявлены. И только им. Этот модификатор еще иногда называют «package», намекая, что доступ к переменным и методам открыт для всего пакета, в котором находится их класс

Таблица с пояснением:

Модификаторы Доступ из…
Своего класса Своего пакета Любого класса
private Есть Нет Нет
нет модификатора (package) Есть Есть Нет
public Есть Есть Есть
undefined
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
Полнометражная картина
В переменной centimeters записано количество сантиметров. В переменную meters нужно записать количество полных метров в centimeters. (1 метр = 100 см). Для вычисления используй переменную centimeters и оператор деления. Для объявления и инициализации meters используй одну команду.
undefined
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
Последняя цифра числа
В переменной number записано число. В переменную lastDigit нужно записать последнюю цифру этого числа. Для вычисления используй переменную number и оператор «остаток от деления». Для объявления и инициализации lastDigit используй одну команду. Подсказка: делить нужно на 10.
undefined
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
9-ка это перевернутая 6-ка
Используя только оператор инкремента, измени значение в переменной six, чтобы на экран вывелась цифра 9.
undefined
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
Когда-то было 32 зуба
Используя только оператор декремента, измени значение переменной toothCounter, чтобы на экран вывелось число 23.