محدوده متغیرها (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
}
قواعد مهم
- متغیر فقط بعد از تعریف قابل استفاده است
- دو متغیر همنام در همان بلوک = خطا
- متغیر بلوک داخلی، بیرونی همنام را میپوشاند
متغیرها را در کوچکترین دامنه ممکن تعریف کنید — کد خواناتر و خطاهای کمتر.
این مبحث بخشی از دوره آموزش کامل جاوا است.