undefined

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

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 Есть Есть Есть
Комментарии (352)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Chess null 3 уровень, Минск
8 марта 2021
Всем привет! Что значит "блок кода"?
misterJKD 4 уровень, Москва
6 марта 2021
Мега круто и понятно разъяснил!))
misterJKD 4 уровень, Москва
6 марта 2021
Рекомендую для новичков типо меня, если материал не зашел сразу, отложите его на какое то время, лучше до утра! Утром инфа заходит легче. Реально работает, только не забывайте развивать мозги литературой, учите стихи( поф какие) изучите метод Пифагора, норм дядька был. В общем все что поможет хватать информацию и переваривать еë моментально!
Dim 13 уровень, Житомир
3 марта 2021

if (args != NULL)
идея пишет ошибку. надо писать мелкими null
seriouseagerman 11 уровень, Москва
22 февраля 2021
или перевод кривой, или... ни как не могу понять разницу между пакетами, классами, методами. переменная или же всё таки объект. как то всё в кучу скинуто.
Юрий 12 уровень, Киев
18 февраля 2021
А "protected" забыли и "final" для особых переменных? А из паралельной вселеной - Я помню internal. А из отголосков редких космических артефактов, переменные бывают еще ; "DB","DW","DD".😀
Дмитрий Шкляев 4 уровень, Екатеринбург
17 декабря 2020
Все изложено доступно, заходит :)
Borman 2 уровень, Хабаровск
11 декабря 2020
Ммм, как круто! Раньше мой отец тут проходил все бесплатно до 40 уровня((
Матвей Максимович Казуров 2 уровень, Москва
8 декабря 2020
кто-нибудь, помогите. Без премиума дальше не пройти. все задачи заблокированы. Материю нигде не достать.
Java Capone 22 уровень, Одесса
8 декабря 2020
🧐