اذهب إلى المحتوى

السؤال

نشر

حيث سأعرض لكم مثالين للتوضيح

class Counter{  
  int count=0;

  Counter(){  
    count++;
    System.out.println(count);  
  }  

  public static void main(String args[]){  

    Counter c1=new Counter();  
    Counter c2=new Counter();  
    Counter c3=new Counter();  
  }  
}  

في هذا المثال يتم طباعة

1
1
1

اما في هذا المثال يعرض

class Counter{  
  static int count=0;  

  Counter(){  
    count++;
    System.out.println(count);  
  }  

  public static void main(String args[]){  

    Counter c1=new Counter();  
    Counter c2=new Counter();  
    Counter c3=new Counter();  
  }  
}  

اما في حال وضعنا statis للمتغير count يكون الناتج

1
2
3

ماذا تعني كلمة static

Recommended Posts

  • 0
نشر

كلمة static كلمة محجوزة في اللغة ويمكن إضافتها إلى المتغيرات أو التوابع ضمن الصنف، وتعني ثابت،

إضافتها لمتغير تجعل هذا المتغير متوفرًا ومتاحا على مستوى الصنف وليس على مستوى الكائنات، في الحالة العادية عند انشاء كائن يتم كل مرة في الذاكرة حجز مكان جديد لكافة المتغيرات المعرفة ضمن صنف هذا الكائن،

لكن للمتغيرات الثابتة static يتم حجز مكان في الذاكرة مرة واحدة فقط، وكل تعامل مع هذا المتغير من أي كائن سيكون على نفس المتغير

لاحظ في الحالة الأولى لديك المتغير تم تجديده في كل مرة أنشئت بها كائنًا جديدا 

class Counter{  
  int count = 0; // متغير جديد لكل كائن
  ...
}

أما في الحالة الثانية كل الكائنات تشاركت نفس المتغير وهو متاح لها جميعًا، وهو سبب زيادة قيمة المتغير ضمن الخرج عند كل انشاء لكائن جديد 1 ثم 2 ثم 3

class Counter{  
  static int count = 0; // متغير واحد لكل الكائنات
  ...
}

 

  • 0
نشر

كلمة static مهمة ورائعة جداً فيما يتعلق بالذاكرة، فهي تساعد المبرمج على إنشاء نظام فعال في إستخدام الذاكرة، أي يقلل من إستخدام الذاكرة. و ذلك لأن كل متغير أو دالة أو غيره تم تعريفه بأنه static فذلك يعني أن هذا المتغير سيتم حجز مكانه في الذاكرة لمرة واحدة فقط.

يعني في مثالك الاول في كل مرة تنشأ فيها كائن من الصنف يحجز قيمة جديدة للمتغير count عند انشاء المتغير الاول count = 0 صحيح ويزيد واحد، وعند انشاء الكائن الثاني يحجز مكان جديد للمتغير count وتكون قيمته ايضاً صفر ويزيد واحد وهكذا 

اما في المثال الثاني فالمتغير count static ومعنى static هنا انه يتم حجز المتغير count مرة واحدة فقط، فعند انشاء اول كائن من الصنف تكون قيمة المتغير count تساوي صفر وتزيد واحد فيصبح count=1 وعند انشاء الكائن الثاني لا يحجز مكان جديد في الذاكرة للمتغير count بل يأخذ القيمة المحجوزة مسبقاً فتصبح قيمة المتغير count = 2 وهكذا 

اتمنى ان اكون قد وفقت في الاجابة على سؤالك

  • 0
نشر

كما أشار حسن فإن الstatic يتم تخزينها على مستوى الصنف وليس الكائن ويوجد أيضًا فرق هام يجب ملاحظته وهو أن الذاكرة تنقسم إلى نوعين

  1. stack memory وتلك يتم تخزين المتغيرات وترتيب تنفيذ الدوال وهي سريعة التنفيذ والوصول إليها
  2. heap memory وفيها يتم تخزين الكائنات وهي بطيئة الوصول إليها

في الحقيقة أن الstatic variables يتم تخزينهم في النوع الثاني (heap memory)  وهذا يعني أن الوصول إلى المتغيرات التي يتم إعلانها كstatic  يكون أبطأ من غيرها مما قد يؤدي إلى مشاكل في الأداء لذا يجب إستخدام خاصية الstatic بعناية وحرص عندما نكون حقًا نحتاجها, على سبيل المثال إن كان لدينا متغير مكلف للموارد عند إنشاؤه ونحن لا نريد إلا نسخة واحدة منه, في تلك الحالة من المفيد إنشاؤه ك static variable حتى يتم إستخدامه من قِبل جميع الكائنات بما أنه على مستوى الصنف .

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...