محدوده متغیرها (Scope)

دامنه متغیرها در جاوا: محلی، بلوکی و کلاس.

Scope چیست؟

دامنه‌ای که یک متغیر در آن قابل دسترسی است — از محل تعریف تا پایان بلوکش.

۱. متغیر محلی (Local)

داخل متد — فقط همان‌جا معتبر:

public static void main(String[] args) {
    int x = 10;   ← در کل main معتبر
    System.out.println(x);
}
// x اینجا وجود ندارد

۲. متغیر بلوکی (Block)

داخل { } — مثل if یا for:

if (true) {
    int y = 20;       ← فقط داخل if
    System.out.println(y);
}
// System.out.println(y);  ← خطا! y اینجا نیست

for (int i = 0; i < 5; i++) {
    // i فقط داخل for معتبر است
}
// System.out.println(i);  ← خطا!

۳. متغیر کلاس (Field)

داخل کلاس اما بیرون متدها — در همه متدها معتبر:

public class Main {
    static int counter = 0;   ← فیلد کلاس — همه‌جا معتبر

    static void increment() {
        counter++;   ← دسترسی به فیلد
    }

    public static void main(String[] args) {
        increment();
        increment();
        System.out.println(counter);   ← 2
    }
}

سایه‌زدن (Shadowing)

متغیر محلی هم‌نام فیلد، فیلد را می‌پوشاند:

static int x = 100;   ← فیلد

static void test() {
    int x = 5;         ← محلی، فیلد را می‌پوشاند
    System.out.println(x);   ← 5
}

قواعد مهم

متغیرها را در کوچک‌ترین دامنه ممکن تعریف کنید — کد خواناتر و خطاهای کمتر.

این مبحث بخشی از دوره آموزش کامل جاوا است.

ابزارهای مرتبط