HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#База знаний</a></p>
1 <p><a>#База знаний</a></p>
2 <ul><li>10 дек 2020</li>
2 <ul><li>10 дек 2020</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Разбираемся, что такое, как работает и в чем особенности использования.</p>
4 </ul><p>Разбираемся, что такое, как работает и в чем особенности использования.</p>
5 <p> vlada_maestro / shutterstock</p>
5 <p> vlada_maestro / shutterstock</p>
6 <p>Преподаватель Skillbox. Пишет про Java, учит Go. Помнит рассвет PHP и как "грабить корованы".</p>
6 <p>Преподаватель Skillbox. Пишет про Java, учит Go. Помнит рассвет PHP и как "грабить корованы".</p>
7 <p>Область видимости переменной - свойство, которое определяет, можно ли использовать переменную из разных областей класса. Это зависит от места, где переменная была объявлена.</p>
7 <p>Область видимости переменной - свойство, которое определяет, можно ли использовать переменную из разных областей класса. Это зависит от места, где переменная была объявлена.</p>
8 <p>Если какая-то переменная объявляется в теле метода, в цикле или условной конструкции, она исчезает после завершения работы этого метода, цикла или ветки. Это же касается и аргументов методов: переменные-аргументы существуют только в момент выполнения метода. А значит, они не могут быть доступны из других блоков кода.</p>
8 <p>Если какая-то переменная объявляется в теле метода, в цикле или условной конструкции, она исчезает после завершения работы этого метода, цикла или ветки. Это же касается и аргументов методов: переменные-аргументы существуют только в момент выполнения метода. А значит, они не могут быть доступны из других блоков кода.</p>
9 <p>Рассмотрим пример кода метода main ():</p>
9 <p>Рассмотрим пример кода метода main ():</p>
10 public static void main(String[] args) { int money = 150; int priceCappuchino = 120; int priceEspresso = 70; if (money &gt;= priceCappuchino) { int change = money - priceCappuchino; System.out.println("хватает на капучино, останется " + change + "р."); } if (money &gt;= priceEspresso) { int change = money - priceEspresso; System.out.println("хватает на эспрессо, останется " + change + "р."); } }<p>В начале метода объявляются переменные money, priceCappuchino, priceEspresso, и инициализируются - устанавливается их значение.</p>
10 public static void main(String[] args) { int money = 150; int priceCappuchino = 120; int priceEspresso = 70; if (money &gt;= priceCappuchino) { int change = money - priceCappuchino; System.out.println("хватает на капучино, останется " + change + "р."); } if (money &gt;= priceEspresso) { int change = money - priceEspresso; System.out.println("хватает на эспрессо, останется " + change + "р."); } }<p>В начале метода объявляются переменные money, priceCappuchino, priceEspresso, и инициализируются - устанавливается их значение.</p>
11 <p>Все три переменные доступны для использования в любой строке этого метода - начиная со строки объявления переменной и заканчивая закрывающейся } метода. Это позволяет использовать эти переменные в блоках if для расчёта суммы оставшихся денег.</p>
11 <p>Все три переменные доступны для использования в любой строке этого метода - начиная со строки объявления переменной и заканчивая закрывающейся } метода. Это позволяет использовать эти переменные в блоках if для расчёта суммы оставшихся денег.</p>
12 <p><strong>Начало области видимости</strong></p>
12 <p><strong>Начало области видимости</strong></p>
13 <p>Область видимости переменной начинается с момента объявления - использовать переменную до её объявления невозможно.</p>
13 <p>Область видимости переменной начинается с момента объявления - использовать переменную до её объявления невозможно.</p>
14 <p>На скриншоте область видимости переменной money выделена зелёным цветом:</p>
14 <p>На скриншоте область видимости переменной money выделена зелёным цветом:</p>
15 <p>Рассмотрим переменные change внутри условных операторов if. Область видимости переменных ограничена {}, в которых они находятся. Это значит, что каждая из двух change работает только внутри своего блока if, а в следующем существует уже другая переменная, но с тем же именем.</p>
15 <p>Рассмотрим переменные change внутри условных операторов if. Область видимости переменных ограничена {}, в которых они находятся. Это значит, что каждая из двух change работает только внутри своего блока if, а в следующем существует уже другая переменная, но с тем же именем.</p>
16 <p>Важно, что переменные change - это две совершенно разные переменные. Области видимости позволяют в непересекающихся блоках кода создавать и использовать переменные с одинаковыми именами.</p>
16 <p>Важно, что переменные change - это две совершенно разные переменные. Области видимости позволяют в непересекающихся блоках кода создавать и использовать переменные с одинаковыми именами.</p>
17 <p><strong>Доступность переменной ограничена областью видимости</strong></p>
17 <p><strong>Доступность переменной ограничена областью видимости</strong></p>
18 <p>Переменная уничтожается после выхода из её области видимости, и далее к ней доступа нет.</p>
18 <p>Переменная уничтожается после выхода из её области видимости, и далее к ней доступа нет.</p>
19 <p>При попытке использовать переменные за пределами цикла и скомпилировать код мы получим ошибку компиляции:</p>
19 <p>При попытке использовать переменные за пределами цикла и скомпилировать код мы получим ошибку компиляции:</p>
20 Main.java:23: error: cannot find symbol System.out.println(change); ^ symbol: variable change location: class Main<p><strong>Область видимости аргументов метода - тело метода</strong></p>
20 Main.java:23: error: cannot find symbol System.out.println(change); ^ symbol: variable change location: class Main<p><strong>Область видимости аргументов метода - тело метода</strong></p>
21 <p>В примере у метода main () один аргумент в виде массива String[] args. Его область видимости - всё тело метода.</p>
21 <p>В примере у метода main () один аргумент в виде массива String[] args. Его область видимости - всё тело метода.</p>
22 <p>Возьмём пример кода:</p>
22 <p>Возьмём пример кода:</p>
23 public static void main(String[] args) { int money = 150; int priceCappuchino = 120; int priceEspresso = 70; for (int i = 0; i &lt;= money; i += 10) { System.out.println("Заработано" + i + "р."); if (i == priceEspresso) { System.out.println("Можно пойти и выпить эспрессо!"); } else if (i == priceCappuchino) { System.out.println("Заработано на капучино!"); } } }<p>В цикле объявляется и инициализируется переменная i, которая используется при проверке условия и увеличивается на 10 при каждой итерации.</p>
23 public static void main(String[] args) { int money = 150; int priceCappuchino = 120; int priceEspresso = 70; for (int i = 0; i &lt;= money; i += 10) { System.out.println("Заработано" + i + "р."); if (i == priceEspresso) { System.out.println("Можно пойти и выпить эспрессо!"); } else if (i == priceCappuchino) { System.out.println("Заработано на капучино!"); } } }<p>В цикле объявляется и инициализируется переменная i, которая используется при проверке условия и увеличивается на 10 при каждой итерации.</p>
24 <p>Область видимости переменной i ограничена телом цикла for, то есть {} после условия цикла. Переменная i будет уничтожена после завершения цикла:</p>
24 <p>Область видимости переменной i ограничена телом цикла for, то есть {} после условия цикла. Переменная i будет уничтожена после завершения цикла:</p>
25 <p>Внутри класса область видимости зависит от типа переменной:</p>
25 <p>Внутри класса область видимости зависит от типа переменной:</p>
26 <ul><li>Статические переменные принадлежат самому классу. Они доступны без создания объекта, область их видимости содержит все методы класса - как статические, так и нет.</li>
26 <ul><li>Статические переменные принадлежат самому классу. Они доступны без создания объекта, область их видимости содержит все методы класса - как статические, так и нет.</li>
27 <li>Нестатические переменные класса принадлежат экземпляру класса (объекта). В их область видимости попадают нестатические методы класса.</li>
27 <li>Нестатические переменные класса принадлежат экземпляру класса (объекта). В их область видимости попадают нестатические методы класса.</li>
28 </ul><p>Пример:</p>
28 </ul><p>Пример:</p>
29 public class Car { private static int totalFuelConsumption; private int fuel = 86; private int consumption; //создаем объект с указанием расхода топлива public Car(int consumption) { this.consumption = consumption; } //метод, имитирующий проезд автомобилем заданного расстояния public void drive(int km) { int fuelRequired = km * consumption; if (fuel &gt;= fuelRequired) { fuel -= fuelRequired; totalFuelConsumption += fuelRequired; System.out.printf("Автомобиль проехал %dкм, потрачено %dл топлива", km, fuelRequired); } } //получаем значение расхода на поездки всех объектов типа Car public static int getTotalFuelConsumption() { return totalFuelConsumption; } }<p>Разберём область видимости каждой из переменных:</p>
29 public class Car { private static int totalFuelConsumption; private int fuel = 86; private int consumption; //создаем объект с указанием расхода топлива public Car(int consumption) { this.consumption = consumption; } //метод, имитирующий проезд автомобилем заданного расстояния public void drive(int km) { int fuelRequired = km * consumption; if (fuel &gt;= fuelRequired) { fuel -= fuelRequired; totalFuelConsumption += fuelRequired; System.out.printf("Автомобиль проехал %dкм, потрачено %dл топлива", km, fuelRequired); } } //получаем значение расхода на поездки всех объектов типа Car public static int getTotalFuelConsumption() { return totalFuelConsumption; } }<p>Разберём область видимости каждой из переменных:</p>
30 <ul><li><strong>private static int totalFuelConsumption</strong> - статическая переменная используется в статическом методе getTotalFuelConsumption () и в нестатическом методе drive (int km). Область видимости здесь - весь класс.</li>
30 <ul><li><strong>private static int totalFuelConsumption</strong> - статическая переменная используется в статическом методе getTotalFuelConsumption () и в нестатическом методе drive (int km). Область видимости здесь - весь класс.</li>
31 <li><strong>private int fuel = 86</strong> - переменная нестатическая. А значит, она может использоваться только в конструкторах класса и его нестатических методах.</li>
31 <li><strong>private int fuel = 86</strong> - переменная нестатическая. А значит, она может использоваться только в конструкторах класса и его нестатических методах.</li>
32 <li><strong>private int consumption</strong> - переменная нестатическая. Значит, она может использоваться только в конструкторах класса и его нестатических методах.</li>
32 <li><strong>private int consumption</strong> - переменная нестатическая. Значит, она может использоваться только в конструкторах класса и его нестатических методах.</li>
33 </ul><p><strong>Ключевое слово this</strong></p>
33 </ul><p><strong>Ключевое слово this</strong></p>
34 <p>Если посмотреть на конструктор класса Car, то переменная, которую передают в аргументе конструктора, названа таким же именем, как и параметр класса. В этом случае области видимости переменной consumption класса и аргумента конструктора consumption пересекаются. По умолчанию используется переменная с более узкой областью видимости, то есть аргумент метода. Чтобы использовать переменную класса, необходимо на неё явно указать с помощью ключевого слова this.</p>
34 <p>Если посмотреть на конструктор класса Car, то переменная, которую передают в аргументе конструктора, названа таким же именем, как и параметр класса. В этом случае области видимости переменной consumption класса и аргумента конструктора consumption пересекаются. По умолчанию используется переменная с более узкой областью видимости, то есть аргумент метода. Чтобы использовать переменную класса, необходимо на неё явно указать с помощью ключевого слова this.</p>
35 <ul><li><strong>int fuelRequired</strong>объявлена в методе drive (). Область видимости ограничена этим методом, использовать в других методах класса невозможно.</li>
35 <ul><li><strong>int fuelRequired</strong>объявлена в методе drive (). Область видимости ограничена этим методом, использовать в других методах класса невозможно.</li>
36 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
36 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>