السلام عليكم
قمت بكتابة هذا الكود :

لماذا يظهر لي ذلك الخطأ و كيف أتجازوه ؟
السلام عليكم
قمت بكتابة هذا الكود :

لماذا يظهر لي ذلك الخطأ و كيف أتجازوه ؟
إستبدل public int x = 0 ب public static int x = 0
تم تعديل هذه المشاركة بواسطة biginner2000 في 25 ديسمبر 2011 في 15:02
هذا الخطأ يظهر لانك تحاول استخدام متغير instance variable من static method
شكرا أخي و لكن لم أفهم كلامك جيدا !!, هل من تفصيل أكثر ؟؟ :blush:
khaled_prg كتب:شكرا أخي و لكن لم أفهم كلامك جيدا !!, هل من تفصيل أكثر ؟؟ :blush:
السلام عليكم
يعني ان المتغيرات او ال methods التى ليست static لا تستطيع استدعاءها من static method
مرحبا أخي صحراوي !
جميل جدا, الآن اتضحت الفكرة :)
ولكن لماذا لا أستطيع استدعاء متغيرات ليست static في static method ؟
khaled_prg كتب:مرحبا أخي صحراوي !
جميل جدا, الآن اتضحت الفكرة :)
ولكن لماذا لا أستطيع استدعاء متغيرات ليست static في static method ؟
السلام عليكم
في الحقيقة يمكننا استدعاء متغيرات static و static method لكن بشرط ان نستدعيها عن طريق الكائن ليس عن طريق الصف
مثلا كان يمكنك الوصول الى المتغير بدون جعله static
Kiwa ob=new Kiwa(); System.out.print(++ob.x);
تم تعديل هذه المشاركة بواسطة sahraoui17 في 28 ديسمبر 2011 في 07:23
إذا كنت لم تتعلم البرمجة الشيئية
فانصحك بقبول المعلومة بدون معرفة السبب
لو كنت تعلم البرمجة الشيئية أخبرني وسأوضح لك بإذن الله
تحياتي
khaled_prg كتب:ولكن لماذا لا أستطيع استدعاء متغيرات ليست static في static method ؟
أخي
مارأيك ان تراجع هذا الفيديو وهو يشرح بالعربي موضوع static
عندما تريد أن تتعلم جافا بالفيديو إليك قنوات الYouTube الخاصة بقسم الحاسب الآلي
(وَمَا أُوتِيتُمْ مِنْ الْعِلْمِ إِلاَّ قَلِيلاً) [سورة الإسراء: الآية 85]
اقتباسيمكننا استدعاء متغيرات static و static method لكن بشرط ان نستدعيها عن طريق الكائن ليس عن طريق الصف
جميل جدا, شكرا على المعلومه, مع أنني لم أعرف جواب سؤالي بعد ! :)
اقتباسإذا كنت لم تتعلم البرمجة الشيئيةفانصحك بقبول المعلومة بدون معرفة السبب
لو كنت تعلم البرمجة الشيئية أخبرني وسأوضح لك بإذن الله
أنا أدرس البرمجة الشيئية هذه السنة في الجامعة, لذلك عندي خلفية عنها, تفضل بشرحك لو سمحت.
اقتباسمارأيك ان تراجع هذا الفيديو وهو يشرح بالعربي موضوع static
جميل جدا, جاري متابعة الفيديو :), شكرا لك.
khaled_prg كتب:جميل جدا, شكرا على المعلومه, مع أنني لم أعرف جواب سؤالي بعد ! :)
السلام عليكم
الاجابة ستجدها في الvideo
لا نستطيع استخدام المتغيرات التى ليست static من static method
لاننا نستطيع استدعاء ال static method من اسم الصنف بدون اللجواء الى كائن
لهذا لا نستطيع استعمالها لان ال متغيرات التى ليست static خاص بي ال object
اقتباسلا نستطيع استخدام المتغيرات التى ليست static من static methodلاننا نستطيع استدعاء ال static method من اسم الصنف بدون اللجواء الى كائن
لهذا لا نستطيع استعمالها لان ال متغيرات التى ليست static خاص بي ال object
مرحبا أخي :)
هنا تكمن مشكلتي في الفهم !, هل لك أن تضع أمثلة للتوضيح .. مع بعض التفصيل لو سمحت. و شكرا.
khaled_prg كتب:مرحبا أخي :)
هنا تكمن مشكلتي في الفهم !, هل لك أن تضع أمثلة للتوضيح .. مع بعض التفصيل لو سمحت. و شكرا.
السلام عليكم
اولا يجب فهم بعض الاشياء
1.المتغير من نوع static هو متغيير مشترك في كل ال object
اي هو خاص بي الصنف ككل و ليس بي object معين
اى اذا غيرنا هذا المتغيير في احدى ال object سوف يتغيير في جميع الobjects الاخرين
علا عكس المتغيير الذي ليس static
مثال:
class test{
int var1=0;
static int var2=0;
public static void main(String[] args){
test ob1=new test();
test ob2=new test();
System.out.println(ob1.var1+" "+ob1.var2);
System.out.println(ob2.var1+" "+ob2.var2);
ob1.var1=10;
ob1.var2=10;
System.out.println(ob1.var1+" "+ob1.var2);
System.out.println(ob2.var1+" "+ob2.var2);
ob2.var1=20;
ob2.var2=20;
System.out.println(ob1.var1+" "+ob1.var2);
System.out.println(ob2.var1+" "+ob2.var2);
}
}اكيد سترى الفرق
عندما غيرنا var2 عن طريق الشى ob2 و اعطينلو قيمة 20
تغير في ob1 ايضا
على عكس var1 الذي احتفظ بقيمته الاصلية التى هي 10
و هذا يعود الى ان المتغير var2 static اي اذ تغير في احدى الobject ستتغير قيمته في object الاخرين
*******
2. الmethod من نوع static
الفرق بين static method و ال non static method هو ان :
ال static method نستطيع استعمالها بدون انشى كائن
اي عن طريق اسم الكلاس فقط
لاحظ المثال
public static void method1(){
//do somethings
}
public void method2(){
//do somethings
}هذان 2 methods اولى static و الثانية ليست static
يمكننا استدعاء الاولى عبر طريقتين
1.
test.method1();
2.
test ob1=new test(); ob1.method1();
على عكس method1
لا يمكننا استدعا method 2 الا عن طريق
test ob1=new test(); ob1.method2();
*****************************
اذا فهمت هتان النقطتين ستعرف لماذا لا نستطيع استعمال المتغيرات التى ليس static في ال static method
لنفترض انن نستطيع ذالك و خذ هذا المثال
class test{
int var1=0;
static int var2=0;
public static void method1(){
System.out.println(var1);
}
public static void main(String[] args){
test ob1=new test();
test ob2=new test();
ob1.var1=10;
ob2.var1=20;
}
}اذا قمنا بهذه الخطوة
test.method1();
ما الرقم الذي سيطبع ؟
10 ام 20
******
لهذا لا نستطيع استعمال ال non static variable في ال static method
اذا لم تتضح الفكرة اخبرني
تم تعديل هذه المشاركة بواسطة sahraoui17 في 28 ديسمبر 2011 في 18:11
مرحبا !
بالنسبة لهاتين النقطتين :
اقتباس1.المتغير من نوع static هو متغيير مشترك في كل ال objectاي هو خاص بي الصنف ككل و ليس بي object معين
2.ال static method نستطيع استعمالها بدون انشى كائن
اي عن طريق اسم الكلاس فقط
فالأمور بخير :)
أما هذه النقطة :
اقتباسلنفترض انن نستطيع ذالك و خذ هذا المثال...
فلم أستوعبها للأسف !
السلام عليكم
انا اقصد بي "لنفترض اننا نستطيع ذالك"
اي لنفرض انن نستطيع استخدام متغيرات ليست static في static method
و المثال يوضح اننا سنواجه مشكلة
و لهذا ممنوع استدعاء استخدام متغيرات ليست static في static method
اذا لم تفهم المشكلة التى واجهناها في المثال اخبرنا
مرحبا أخي صحراوي !
حسب ما فهمت فإن :
بالنسبة للمتغيرات "الغير ساكنة" فتوجد منها عدة نسخ, كل نسخة ترافق الكائن الذي تم إنشائه, لذلك لا نستطيع استدعاء المتغير الغير ساكن انطلاقا من اسم الصنف لوجود عدة نسخ من المتغير, أما المتغيرات الساكنة فوجودها وحيد (تتبع للصنف و ليس الكائن) و هذا ما أمكننا من استدعائها عن طريق اسم الصنف.
إذا كان فهمي صحيح :
تم تعديل هذه المشاركة بواسطة khaled_prg في 30 ديسمبر 2011 في 12:30
khaled_prg كتب:مرحبا أخي صحراوي !
حسب ما فهمت فإن :
بالنسبة للمتغيرات "الغير ساكنة" فتوجد منها عدة نسخ, كل نسخة ترافق الكائن الذي تم إنشائه, لذلك لا نستطيع استدعاء المتغير الغير ساكن انطلاقا من اسم الصنف لوجود عدة نسخ من المتغير, أما المتغيرات الساكنة فوجودها وحيد (تتبع للصنف و ليس الكائن) و هذا ما أمكننا من استدعائها عن طريق اسم الصنف.
إذا كان فهمي صحيح :
- سواء استدعينا المتغير عن طريق دالة ساكنة أو لا فالأمر واحد (لا يمكننا استدعاء متغير غير ساكن عن طريق اسم الصنف) .. إذا, لماذا نربط استدعاء المتغيرات بالدوال الساكنة ؟
- بالنسبة للفيديو, يقول الأخ في الدقيقة 19:56 ما يلي : هذا ما يمنع أن method عادية تغير static field لأن في النهاية أي object يقدر يوصل حق الكلاس يوصل حق static field ولكن المنطق يقول أن static method هي اللي تغير static filed أي منطق ؟, ألا نستطيع تغيير المتغير الساكن عن طريق دالة غير ساكنة ؟؟
نستطيع تغيير المتغيرات static من non static method لكن العكس هو الممنوع
اقتباسنستطيع تغيير المتغيرات static من non static method لكن العكس هو الممنوع
و لماذا ممنوع ؟
حسب ما فهمت .. لا يمكننا تغيير متغير non static باستخدام أي دالة (عن طريق اسم الصنف) .. سواء كانت static أو لا !, صح ؟
khaled_prg كتب:و لماذا ممنوع ؟
حسب ما فهمت .. لا يمكننا تغيير متغير non static باستخدام أي دالة (عن طريق اسم الصنف) .. سواء كانت static أو لا !, صح ؟
اذا كانت هذه الدالة non static لا نستطيع استدعائها عن طريق اسم الصنف
لهذا يسمح استعمال المتغيرات static في non static method
اقتباساذا كانت هذه الدالة non static لا نستطيع استدعائها عن طريق اسم الصنف
طيب, و هل الــ method الخاصة بالإظهار System.out.println تعتبر static ؟؟
khaled_prg كتب:طيب, و هل الــ method الخاصة بالإظهار System.out.println تعتبر static ؟؟
لست متاكد
لكن اضن نعم
khaled_prg كتب:طيب, جزاك الله خيرا :)
ترى, ما قصرت.
ههههههههههههههههههههههههههههههههههههههههههههههههههههههه
قبضت عليك متلبس
و تقلي انك جزائري ههههههههههههههه
هل هناك جزائري يقول "ترى ما قصرت"
تم تعديل هذه المشاركة بواسطة sahraoui17 في 30 ديسمبر 2011 في 13:22
sahraoui17 كتب:ههههههههههههههههههههههههههههههههههههههههههههههههههههههه
قبضت عليك متلبس
و تقلي انك جزائري ههههههههههههههه
هل هناك جزائري يقول "ترى ما قصرت"
+1 على النكتة الطريفة ! ههههههههههههههه
أنا لست خليجي .. أقسم بالله :)
لكن من كثرة تعودي على مخالطة الخليجين في المنتدى .. صرت أتكلم بلهجتهم دون أن أشعر :D
و الله على ما أقول شهيد ^_^
تم تعديل هذه المشاركة بواسطة khaled_prg في 30 ديسمبر 2011 في 13:41