JavaRush /Курсы /Java Syntax /Видимость переменных

Видимость переменных

Java Syntax
2 уровень , 4 лекция
Открыта

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

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

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

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

— Логично.

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


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 Есть Есть Есть
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
Полнометражная картина
В переменной centimeters записано количество сантиметров. В переменную meters нужно записать количество полных метров в centimeters. (1 метр = 100 см). Для вычисления используй переменную centimeters и оператор деления. Для объявления и инициализации meters используй одну команду.
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
Последняя цифра числа
В переменной number записано число. В переменную lastDigit нужно записать последнюю цифру этого числа. Для вычисления используй переменную number и оператор «остаток от деления». Для объявления и инициализации lastDigit используй одну команду. Подсказка: делить нужно на 10.
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
9-ка это перевернутая 6-ка
Используя только оператор инкремента, измени значение в переменной six, чтобы на экран вывелась цифра 9.
2
Задача
Java Syntax Pro, 2 уровень, 4 лекция
Недоступна
Когда-то было 32 зуба
Используя только оператор декремента, измени значение переменной toothCounter, чтобы на экран вывелось число 23.
Комментарии (380)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
AL Koriks Уровень 3
27 марта 2025
жесть
vlafriday Уровень 1
6 февраля 2024
06.02.2024 check, мой уровень 2
hidden #3261479 Уровень 3
1 марта 2023
можно ли сказать, что обект класса это блок кода?!
Sbeu_Chmonya Уровень 14
15 сентября 2023
Нет, объект точно нет, так как - это воплощение физическое класса. А вот класс, можно в целом назвать неким блоком кода. У нгео же, как и у метода, есть открывающая и закрывающая скобка.
OneTap Уровень 4
13 декабря 2022
Куда я жмякнул, я только на 3 уровне(
ArturLamp Уровень 2
31 октября 2022
Этот уровень просто находиться в неподходящем месте. Сейчас прохожу 7 уровень и только там я понял о чем говориться в этом уроке. Он должен быть как минимум в 7 уровне.
Anton Serhiyenka Уровень 6
21 декабря 2022
Вы сталкивались с public и на 3 уровне, и до 3 уровня. Тут просто объяснили, что это такое - а то есть модификатор доступа. Ничего критичного не вижу в том, что тема находится именно тут.
Dimash Уровень 1
1 августа 2022
*тык* рекомендую по теме
krc777 Уровень 3
13 октября 2022
Отлично! Спасибо
Анна Марк Уровень 2
15 января 2023
Видео супер информативное, спасибо добрый человек🖐
Dimash Уровень 1
15 января 2023
Желаю вам удачи)
Anonymous #3306233 Уровень 6
22 мая 2023
Спасибо, видео очень помогло
Anonymous #3048258 Уровень 12
6 апреля 2022
Я понял что такое пакеты. Пакеты- в ашане. В них складывают продукты, потом на кассу и на базу. Дома ешь все и потом пакет в пакет для пакетов.
Roman Frolov Уровень 3
18 марта 2022
"Переменная, объявленная в блоке кода, существует до конца этого блока кода". Я так понимаю речь об s2?

{
┃┃ ┃  ┃    String s2 = s;
┃┃ ┃  ┃   ┗━━━━┛
┃┃ ┃  ┃  ┏
┃┃ ┃  ┃  ┃ System.out.println(s2);
┃┃ ┃  ┃  ┗
┃┃ ┃  ┃ }
Я че, после этого куска кода не могу к ней обратиться? Почему?
DS Уровень 18
5 апреля 2022
Для себя объяснил так: скорее всего потому что там чуть выше условие if и данная переменная срабатывает только в случае args != NULL.
Babusya Уровень 35
23 мая 2022
Блочный код — это код между фигурными скобками. Примеры можно привести из других мест программы. Я думаю, что выбран и окрашен только определенный маленький кусочек
Anonymous #3123282 Уровень 3
25 июля 2022
Ты объявляешь переменную s2 в блоке if. Ты можешь обращаться к ней в этом блоке, но после него уже не сможешь.
VV Уровень 6
29 января 2022
а в idea как то можно настроить такое же отображение в коде?
Alexey Уровень 9
24 января 2022
а где protected?)