Карта / Методы / Область видимости

Область видимости

Область видимости (scope) — это где переменная “жива” и видна. Переменная существует только внутри своих фигурных скобок { } — снаружи о ней никто не знает:

void method() {
    int x = 5;        // x родилась здесь
    if (x > 0) {
        int y = 10;    // y видна только внутри if
    }
    // здесь y уже не существует — вышла за свои { }
}
// здесь не существует и x — метод закончился

Представь область видимости как комнату: переменная — мебель в этой комнате. Выйди из комнаты — мебель не заберёшь с собой, она просто перестаёт быть доступной.

Копнуть глубже

Параметры метода живут во всём теле метода — это тоже своего рода переменные, просто их значение приходит снаружи при вызове.

Поля класса видны во всех методах класса (через this или просто по имени), а не только в одном блоке — их область видимости шире, она привязана к объекту, а не к фигурным скобкам одного метода.

Затенение (shadowing). Если локальная переменная называется так же, как поле класса, локальная “перекрывает” поле внутри своего блока:

class Counter {
    int count = 0;
    void reset() {
        int count = 100;   // затеняет поле count
        this.count = 0;    // this. — явно обращаемся к полю, а не к локальной
    }
}
Под капотом

Локальные переменные живут на стеке — конкретно в кадре (frame) текущего вызова метода. Когда метод завершается, его кадр стека целиком уничтожается — вместе с ним исчезают и все локальные переменные. Поэтому область видимости — это не просто “правило компилятора для красоты”, а прямое отражение того, как устроена память: переменной физически негде быть после выхода из блока, кадр стека уже снят.

🎤 Закрыл тему, если можешь объяснить:
• что такое область видимости и почему переменная "умирает" за пределами своих `{ }`;
• что такое затенение и зачем нужен `this.` (если дошёл до 2-го слоя).