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

لماذا لا أستطيع الوصول إلى هذا المتغير ؟

بدأه khaled_prg في 25 ديسمبر 2011 · 28 رد · 989 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#2

إستبدل public int x = 0 ب public static int x = 0

تم تعديل هذه المشاركة بواسطة biginner2000 في 25 ديسمبر 2011 في 15:02

#4

هذا الخطأ يظهر لانك تحاول استخدام متغير instance variable من static method

#6
khaled_prg كتب:

شكرا أخي و لكن لم أفهم كلامك جيدا !!, هل من تفصيل أكثر ؟؟ :blush:

السلام عليكم

يعني ان المتغيرات او ال methods التى ليست static لا تستطيع استدعاءها من static method

1
#8
khaled_prg كتب:

مرحبا أخي صحراوي !

جميل جدا, الآن اتضحت الفكرة :)

ولكن لماذا لا أستطيع استدعاء متغيرات ليست static في static method ؟

السلام عليكم

في الحقيقة يمكننا استدعاء متغيرات static و static method لكن بشرط ان نستدعيها عن طريق الكائن ليس عن طريق الصف

مثلا كان يمكنك الوصول الى المتغير بدون جعله static

Kiwa ob=new Kiwa();
  	System.out.print(++ob.x);

تم تعديل هذه المشاركة بواسطة sahraoui17 في 28 ديسمبر 2011 في 07:23

1
#9

إذا كنت لم تتعلم البرمجة الشيئية

فانصحك بقبول المعلومة بدون معرفة السبب

لو كنت تعلم البرمجة الشيئية أخبرني وسأوضح لك بإذن الله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10
khaled_prg كتب:

ولكن لماذا لا أستطيع استدعاء متغيرات ليست static في static method ؟

أخي

مارأيك ان تراجع هذا الفيديو وهو يشرح بالعربي موضوع static

1

عندما تريد أن تتعلم جافا بالفيديو إليك قنوات الYouTube الخاصة بقسم الحاسب الآلي

أ. فاضل خداده

أ. عبدالعزيز الرومي

أ. وحيد الساير

(وَمَا أُوتِيتُمْ مِنْ الْعِلْمِ إِلاَّ قَلِيلاً) [سورة الإسراء: الآية 85]

#11
اقتباس
يمكننا استدعاء متغيرات static و static method لكن بشرط ان نستدعيها عن طريق الكائن ليس عن طريق الصف

جميل جدا, شكرا على المعلومه, مع أنني لم أعرف جواب سؤالي بعد ! :)

اقتباس
إذا كنت لم تتعلم البرمجة الشيئية

فانصحك بقبول المعلومة بدون معرفة السبب

لو كنت تعلم البرمجة الشيئية أخبرني وسأوضح لك بإذن الله

أنا أدرس البرمجة الشيئية هذه السنة في الجامعة, لذلك عندي خلفية عنها, تفضل بشرحك لو سمحت.

اقتباس
مارأيك ان تراجع هذا الفيديو وهو يشرح بالعربي موضوع static

جميل جدا, جاري متابعة الفيديو :), شكرا لك.

#12
khaled_prg كتب:

جميل جدا, شكرا على المعلومه, مع أنني لم أعرف جواب سؤالي بعد ! :)

السلام عليكم

الاجابة ستجدها في الvideo

لا نستطيع استخدام المتغيرات التى ليست static من static method

لاننا نستطيع استدعاء ال static method من اسم الصنف بدون اللجواء الى كائن

لهذا لا نستطيع استعمالها لان ال متغيرات التى ليست static خاص بي ال object

#13
اقتباس
لا نستطيع استخدام المتغيرات التى ليست static من static method

لاننا نستطيع استدعاء ال static method من اسم الصنف بدون اللجواء الى كائن

لهذا لا نستطيع استعمالها لان ال متغيرات التى ليست static خاص بي ال object

مرحبا أخي :)

هنا تكمن مشكلتي في الفهم !, هل لك أن تضع أمثلة للتوضيح .. مع بعض التفصيل لو سمحت. و شكرا.

#14
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
#15

مرحبا !

بالنسبة لهاتين النقطتين :

اقتباس
1.المتغير من نوع static هو متغيير مشترك في كل ال object

اي هو خاص بي الصنف ككل و ليس بي object معين

2.ال static method نستطيع استعمالها بدون انشى كائن

اي عن طريق اسم الكلاس فقط

فالأمور بخير :)

أما هذه النقطة :

اقتباس
لنفترض انن نستطيع ذالك و خذ هذا المثال

...

فلم أستوعبها للأسف !

#16

السلام عليكم

انا اقصد بي "لنفترض اننا نستطيع ذالك"

اي لنفرض انن نستطيع استخدام متغيرات ليست static في static method

و المثال يوضح اننا سنواجه مشكلة

و لهذا ممنوع استدعاء استخدام متغيرات ليست static في static method

اذا لم تفهم المشكلة التى واجهناها في المثال اخبرنا

#17

مرحبا أخي صحراوي !

حسب ما فهمت فإن :

بالنسبة للمتغيرات "الغير ساكنة" فتوجد منها عدة نسخ, كل نسخة ترافق الكائن الذي تم إنشائه, لذلك لا نستطيع استدعاء المتغير الغير ساكن انطلاقا من اسم الصنف لوجود عدة نسخ من المتغير, أما المتغيرات الساكنة فوجودها وحيد (تتبع للصنف و ليس الكائن) و هذا ما أمكننا من استدعائها عن طريق اسم الصنف.

إذا كان فهمي صحيح :

  1. سواء استدعينا المتغير عن طريق دالة ساكنة أو لا فالأمر واحد (لا يمكننا استدعاء متغير غير ساكن عن طريق اسم الصنف) .. إذا, لماذا نربط استدعاء المتغيرات بالدوال الساكنة ؟
  2. بالنسبة للفيديو, يقول الأخ في الدقيقة 19:56 ما يلي :
    هذا ما يمنع أن method عادية تغير static field لأن في النهاية أي object يقدر يوصل حق الكلاس يوصل حق static field ولكن المنطق يقول أن static method هي اللي تغير static filed
    أي منطق ؟, ألا نستطيع تغيير المتغير الساكن عن طريق دالة غير ساكنة ؟؟

تم تعديل هذه المشاركة بواسطة khaled_prg في 30 ديسمبر 2011 في 12:30

#18
khaled_prg كتب:

مرحبا أخي صحراوي !

حسب ما فهمت فإن :

بالنسبة للمتغيرات "الغير ساكنة" فتوجد منها عدة نسخ, كل نسخة ترافق الكائن الذي تم إنشائه, لذلك لا نستطيع استدعاء المتغير الغير ساكن انطلاقا من اسم الصنف لوجود عدة نسخ من المتغير, أما المتغيرات الساكنة فوجودها وحيد (تتبع للصنف و ليس الكائن) و هذا ما أمكننا من استدعائها عن طريق اسم الصنف.

إذا كان فهمي صحيح :

  1. سواء استدعينا المتغير عن طريق دالة ساكنة أو لا فالأمر واحد (لا يمكننا استدعاء متغير غير ساكن عن طريق اسم الصنف) .. إذا, لماذا نربط استدعاء المتغيرات بالدوال الساكنة ؟
  2. بالنسبة للفيديو, يقول الأخ في الدقيقة 19:56 ما يلي : هذا ما يمنع أن method عادية تغير static field لأن في النهاية أي object يقدر يوصل حق الكلاس يوصل حق static field ولكن المنطق يقول أن static method هي اللي تغير static filed أي منطق ؟, ألا نستطيع تغيير المتغير الساكن عن طريق دالة غير ساكنة ؟؟

نستطيع تغيير المتغيرات static من non static method لكن العكس هو الممنوع

#19
اقتباس
نستطيع تغيير المتغيرات static من non static method لكن العكس هو الممنوع

و لماذا ممنوع ؟

حسب ما فهمت .. لا يمكننا تغيير متغير non static باستخدام أي دالة (عن طريق اسم الصنف) .. سواء كانت static أو لا !, صح ؟

#20
khaled_prg كتب:

و لماذا ممنوع ؟

حسب ما فهمت .. لا يمكننا تغيير متغير non static باستخدام أي دالة (عن طريق اسم الصنف) .. سواء كانت static أو لا !, صح ؟

اذا كانت هذه الدالة non static لا نستطيع استدعائها عن طريق اسم الصنف

لهذا يسمح استعمال المتغيرات static في non static method

#21
اقتباس
اذا كانت هذه الدالة non static لا نستطيع استدعائها عن طريق اسم الصنف

طيب, و هل الــ method الخاصة بالإظهار System.out.println تعتبر static ؟؟

#22
khaled_prg كتب:

طيب, و هل الــ method الخاصة بالإظهار System.out.println تعتبر static ؟؟

لست متاكد

لكن اضن نعم

#24
khaled_prg كتب:

طيب, جزاك الله خيرا :)

ترى, ما قصرت.

ههههههههههههههههههههههههههههههههههههههههههههههههههههههه

قبضت عليك متلبس

و تقلي انك جزائري ههههههههههههههه

هل هناك جزائري يقول "ترى ما قصرت"

تم تعديل هذه المشاركة بواسطة sahraoui17 في 30 ديسمبر 2011 في 13:22

1
#25
sahraoui17 كتب:

ههههههههههههههههههههههههههههههههههههههههههههههههههههههه

قبضت عليك متلبس

و تقلي انك جزائري ههههههههههههههه

هل هناك جزائري يقول "ترى ما قصرت"

+1 على النكتة الطريفة ! ههههههههههههههه

أنا لست خليجي .. أقسم بالله :)

لكن من كثرة تعودي على مخالطة الخليجين في المنتدى .. صرت أتكلم بلهجتهم دون أن أشعر :D

و الله على ما أقول شهيد ^_^

تم تعديل هذه المشاركة بواسطة khaled_prg في 30 ديسمبر 2011 في 13:41

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