الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

static variable

مغلق
بدأه akram في 9 ديسمبر 2004 · 29 رد · 4,928 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

السلاام عليكم اشكر الاخوان على سعة صدورهم وتدريبهم لنا نحن المبتدئين

بس حبيت اسجل شكري لكم ورجائي بعدم التوقف بمثل هذه الدروس التي تتناول اشياء متداولة باسلوب علمي وتفصيلي

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

وشكرا

تم تعديل هذه المشاركة بواسطة matiz في 1 مايو 2005 في 13:32

#27

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

من المعلوم ان كل كائن له دورة حياة معينة هي تواجده في الذاكر لفترة معينة بمعنى ان حياته بين الأقواس { }

ولكن المتغير الساكن حياته دائمة طالما وان الكلاس موجودة في الذاكرة

مثال بسيط جدا لذلك

import java.io.*;
public class Person
{
static int count=0;
String name=null;
int nr=0;
public Person(String nam)
{
  this.nr=++count;
  this.name=nam;
}
public void describme()
{
  System.out.println(nr +"/" +count+"\t"+name);
}
public static getCount()
{
 return count;
}
public static void main(String args[])
{
  System.out.println("Count for Persons:"+Person.getCount());
  Person p1=new Person("Ali");
  Person p2=new Person("Amr");
  Person p3=new Person("Ahmed");
  p1.describme();
  p2.describme();
  p3.describme();
  System.out.println("Count for Persons:"+Person.getCount());
}
}

البرنامج لم يختبر وقد يحتوي على اخطأ ارجو تعديل ذلك ان وجد والنتائج سوف تراها بنفسك

تم تعديل هذه المشاركة بواسطة khwlani في 2 مايو 2005 في 23:18

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#28

بدون تجربة: لكن طالما أن الموضوع شرح للمتغيرات والأوامر الثابتة والغير ثابتة أقترح مراجعة الشفرة السابقة ولاسيما أنها تحتوي على public void main ويفترض أن تكون public static void main و public static getCout يفترض أن تكون public static int getCount.

#29

الاخوة جميعاً شاكر لكم تفاعلكم

حياكم الله

لربما يستطيع المبرمج الاستغناء عن استخدام static

لكن مصمموا الجافا وضعوا ال static بالشكل الذي تحدثنا عليه سابقاً لانه يقوم بهدفه المعمول له بطريقة اسرع وبمساحة اقل وبشكل اسهل على المبرمج

اخي الطيب kkhalil2005

اعتقد ان ردك هو الرد المباشر على سؤالي

وايمح لي فقط ان ابسطه للمبتدئين

اخونا kkhalil2005

اخبرنا أن فائدة ال static

1- توفير مساحة على الذاكرة

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

بينما غير ال static فانه المتغيرات سيحجز لها مكان في الذاكرة بقدر عدد الاوبجكتات

(واخي الخولاني قد وضح هذا الامر بشكل مفصل بارك الله فيه)

2- فائدة برمجية

قد نحتاج في برنامج معين الى عمل متغير مشترك بين جميع الاوبجكتات

فمن خلال ال static الامر سهل جدا جدا

(والاخوة قد ذكروا امثلة تتعلق بهذه النقطة)

3- لغة الجافا هي لغة OOP

يعني بكلمات ابسط لغة واقعية فيها كائنات وفئات ووالخ

والفئة(الكلاس) عندما ننشئها المفروض يكون لها معنى مقارب للواقع

فيكون عندنا instance variables متناسبة مع الفئة

وكذلك مثدس متناسبة مع الفئة

مثلاً الفئة Human

ربما يكون لها instance variable

String name

int age

boolean sex

ويكون لها مثدس مثلاً

getName()

getAge()

isMale()

فكما نلاحظ المثدس والمتغيرات تتعلق بالفئة نفسها Human

ولنفرض انه هذه الفئة Human اعجبت شركة عملاقة وقالت لنا هذه الشركة اعطونا هذه الفئة نستخدمها في برامجنا اللي بنسويها

واحنا وافقنا وقلنا لهم خذوا الفئة حقنا Human

طيب الشركة عجبتها الفئة بس الشركة لما تتعامل مع الفئة ما بتتاعمل مع المتغير sex

والمثد isMale

فالشركة هذه معظم عمالها ذكور ونادر نادر ما فيه انثى فاستخدام isMale نادر جدا جداً

ففي حالة كان المتغير sex والمثد isMale ليس static

في هذه الحالة الشركة ما راح يعجبها الفئة حقنا

لأنه كلما سوت الشركة ابوجكت من الفئة حقنا حجزت للاوبجكت في الذاكرة مكان للمتغير sex والمثد isMale

فراح تستهلك الفئة مساحة كبيرة على الفاضي

لكن اخواننا اذكياء

قالوا نسوي المتغير sex نخليه static

وكذلك المثد isMale

ففي هذه الحالة

لن تأخذ الفئة Human مساحة كبيرة على الفاضي من الذاكرة

ونكون استفدنا كثير من ال static

4- افرض انا بدي اسوي مثدس بس هذه المثدس كثيرة وبعدين كل مثد ما لها علاقة قوية بالمثد الاخرى

هل اقوم اسوي كلاس لكل مثد مشكلة ؟

او غالباً ما يكون الامر اني اريد اسوي كلاس يحتوي على مثدس هذه المثدات فيه بينها علاقة

بس الكلاس لا يوجد فيه instance variables تستخدمها المثدس

كل المثدس تتعامل مع متغيرات مؤقتة معرفة داخل كل مثد على حدة نفسها

لحل هذا الامر

نسوي كلاس بدون اي instance variables

ويكون كل المثدس اللي فيه static

ومثل هذه الكلاسات موجودة بالجافا مثل الكلاس

Math

هذا الكلاس كل شيء فيه static

وما ذكره البقية فيه توضيح اكثر

اعتقد انه موضوع ال static الان قد اخذ نصيبه

تحياتي

لا بد من صنعاء وان طال السفر

#30

اخي الحبيب الخولاني

حياك الله يا مرحبا

يا مرحبا

ثاني شخص من اليمن اراه في هذا المنتدى يا لفرحتي يا لسعادتي

بوركت بوركت

نعم اخي الفاضل ما ذكرته كلام سليم صحيح 100%

بالتوفيق بارك الله فيك

وانبه الجميع الى نقطة مهمة جدا جدا ذكرها اخي الخولاني

وهي في بعض الحالات وربما غالباً لا ينصح باستخدام ال static

بكلمات ادق

اذا لم يكن هناك داعي نسوي static فلا نسويه

لييييش؟

الاخ الخولاني وضح لنا

ففبسط لكم كلامه

1- لانه اذا معك متغير static فمساحته بتنحجز بتنحجز سواء انشئت اوبجكت والا ما انشئت اوبجكت من الكلاس اللي فيه المتغير

وغالباً نحن لا نحتاج الى المتغير اصلاً الا في حالة انشاء الاوبجكت

فبيكون عمل ال static هنا ما له اي داعي ولا فائدة بالعكس استخدام مساحة على الفاضي

2- بعض الاحيان من الغلط ان نجعل متغير ما مشترك بين الاوبجكتات

لانه بعض الاحيان نحتاج الى ذلك المتغير يكون خاص باوبجكت معين

فلا بد عليك ايها المبتدء من التنبه على متى يصح لك استخدام static ومتى لا يصح

تحياتي

والسلام ختام

تم تعديل هذه المشاركة بواسطة san3aniJava في 1 مايو 2005 في 15:18

لا بد من صنعاء وان طال السفر

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…