static في Java | شرح مبسّط للغاية مع أمثلة واقعية

18:00 دقائق مجاني
شرح static من الصفر: ماذا تعني؟ ولماذا ترتبط بالكلاس لا بالكائن؟ وكيف نستخدم static variables و static methods؟

عندما تنشئ 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.