static في Java | شرح مبسّط للغاية مع أمثلة واقعية
عندما تنشئ Object من Class، تكون لكل كائن “نسخته” الخاصة من البيانات. مثلًا: إذا أنشأت شخصين، لكل واحد اسم وعمر مختلفان.
لكن أحيانًا نحتاج قيمة أو دالة تكون مشتركة بين الجميع، لا تخص كائنًا واحدًا.
مثل: عدّاد لعدد الكائنات المنشأة، أو دالة رياضية عامة.
هنا نستخدم static.
بعبارة بسيطة:
staticتعني أن الشيء تابع للكلاس نفسه.- لا تحتاج إلى إنشاء Object للوصول إليه.
مثال 1: متغير static كعدّاد
سننشئ كلاس فيه عدّاد يُحسب عدد الكائنات التي تم إنشاؤها:
class Counter {
public static int count = 0;
Counter() {
count++;
}
}
Counter a = new Counter();
Counter b = new Counter();
System.out.println(Counter.count); // 2
لاحظ:
- المتغير
countواحد فقط للجميع. - عند إنشاء أي كائن جديد، يزيد العداد.
- نصل إليه عبر اسم الكلاس:
Counter.count.
مثال 2: دالة static (لا تحتاج Object)
كثير من الدوال العامة تكون static، مثل الدوال الرياضية.
class MathUtil {
public static int add(int a, int b) {
return a + b;
}
}
System.out.println(MathUtil.add(5, 3));
هنا لم ننشئ كائنًا من MathUtil، لأن الدالة static تابعة للكلاس نفسه.
قاعدة سهلة: متى أستخدم static؟
- استخدم
staticعندما تكون القيمة مشتركة بين جميع الكائنات. - استخدم
staticللدوال العامة التي لا تعتمد على بيانات كائن معين. - لا تستخدم
staticلكل شيء؛ لأن ذلك يلغي فكرة الكائنات ويفسد التصميم.
معلومة مهمة جدًا: static لا ترى غير static
داخل دالة static (مثل main) لا يمكنك استخدام متغيرات “غير static” مباشرة لأن هذه المتغيرات تحتاج كائنًا.
مثال توضيحي:
class Test {
int x = 10;
public static void main(String[] args) {
// System.out.println(x); // خطأ: x ليست static
}
}
للوصول إلى x يجب إنشاء كائن أولًا:
Test t = new Test(); System.out.println(t.x);
أخطاء شائعة للمبتدئين
- اعتبار static “أفضل” من غيرها ثم استخدامها في كل مكان.
- الخلط بين الوصول عبر الكلاس (ClassName.member) والوصول عبر كائن (object.member).
- استخدام static مع بيانات يجب أن تكون مختلفة لكل كائن (مثل اسم الشخص).
✅ رائع. الآن سننتقل إلى شيء ستحتاجه كثيرًا: كيف تخزّن مجموعة قيم داخل متغير واحد باستخدام المصفوفات Arrays.