0Pricing
Java Academy · Урок

Область видимости и время существования

Разберитесь, где видны переменные (область видимости) и как долго они существуют (время существования): блоки, циклы, методы, поля, затенение и параметры 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 — локальная установка не требуется.

Все уроки этого курса

  1. Определение методов и параметров
  2. Возвращаемые значения и перегрузка
  3. Область видимости и время существования
← Назад к Java Academy