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 >= priceCappuchino) { int change = money - priceCappuchino; System.out.println("хватает на капучино, останется " + change + "р."); } if (money >= 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 >= priceCappuchino) { int change = money - priceCappuchino; System.out.println("хватает на капучино, останется " + change + "р."); } if (money >= 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 <= 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 <= 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 >= 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 >= 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>