Область видимости и время существования
Разберитесь, где видны переменные (область видимости) и как долго они существуют (время существования): блоки, циклы, методы, поля, затенение и параметры final.
«Область видимости и время существования» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 3 уроков всего.
Область видимости и время жизни
Область видимости — это место, где видно имя (переменную). Время жизни — это продолжительность существования переменной. Вы изучите область видимости блока и цикла, локальные переменные метода, поля класса и правила затенения.
Область видимости блока
Область видимости блока: переменная, объявленная внутри фигурных скобок, видна только внутри этих скобок.
public class Main {
public static void main(String[] args) {
int a = 10; // visible in main
{
int b = 20; // visible only inside this block
System.out.println("inside block: a=" + a + ", b=" + b);
}
System.out.println("outside block: a=" + a);
// System.out.println(b); // would NOT compile: b is out of scope
}
}
Область видимости цикла
Область видимости цикла: индекс цикла, объявленный в заголовке for, виден только внутри тела цикла.
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 3; i = i + 1) {
System.out.println("i in loop = " + i);
}
// System.out.println(i); // would NOT compile: i is scoped to the loop
int j;
for (j = 0; j < 2; j = j + 1) {
System.out.println("j in loop = " + j);
}
System.out.println("j after loop = " + j); // OK: j declared outside
}
}
Поля и локальные переменные
Время жизни: поля класса и статические поля сохраняются между вызовами; локальные переменные создаются заново при каждом вызове, а затем удаляются после завершения метода.
public class Main {
// static field (class-level): lives for the program lifetime
static int counter = 0;
static void tick() {
int local = 100; // local: created each call, dies when method returns
counter = counter + 1;
System.out.println("tick: counter=" + counter + ", local=" + local);
}
public static void main(String[] args) {
tick();
tick();
tick();
System.out.println("final counter=" + counter);
}
}
Затенение
Затенение: внутреннее объявление, например параметр или локальная переменная, может скрыть внешнее имя с тем же идентификатором. Используйте ClassName.field (или this.field в методах экземпляра), чтобы обратиться к скрытому полю.
public class Main {
static String label = "FIELD"; // class field
static void demo(String label) { // parameter shadows field name
System.out.println("param label = " + label); // uses parameter
{
String labelInner = "INNER"; // new name in inner block
System.out.println("inner block labelInner = " + labelInner);
System.out.println("still param label = " + label);
}
System.out.println("field via class name = " + Main.label); // refer to field explicitly
}
public static void main(String[] args) {
demo("PARAM");
}
}
Неизменяемые параметры и передача по значению
Параметры, объявленные как final, нельзя переназначить. В Java используется передача по значению: переназначение параметра не изменяет переменную вызывающего кода.
public class Main {
// final parameter cannot be reassigned inside the method
static int inc(final int n) {
// n = n + 1; // would NOT compile if uncommented
return n + 1; // safe: return a new value
}
static void reassign(int x) {
x = 999; // reassignes the local copy; caller variable is unchanged
}
public static void main(String[] args) {
int a = 5;
int b = inc(a);
System.out.println("a=" + a + ", b=inc(a)=" + b);
reassign(a);
System.out.println("after reassign(a): a is still " + a);
}
}
Проверка области видимости и времени жизни
Быстрая проверка: какое утверждение об области видимости и времени жизни является TRUE?
Повторение и далее
Повторение: Вы изучили область видимости блоков и циклов, различия между полями и локальными переменными, затенение и параметры final. Далее: перейдите к шаблонам проектирования и повторного использования в A2.2.
Часто задаваемые вопросы
Урок «Область видимости и время существования» бесплатный?
Да — полный текст урока «Область видимости и время существования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 3 уроков всего.
Чему я научусь в уроке «Область видимости и время существования»?
Разберитесь, где видны переменные (область видимости) и как долго они существуют (время существования): блоки, циклы, методы, поля, затенение и параметры final. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Область видимости и время существования»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Определение методов и параметров
- Возвращаемые значения и перегрузка
- Область видимости и время существования