سوال از نمونه كد

پرسیده شده
فعالیت 1464 روز پیش
دیده شده 854 بار
2

با سلام و خدا قوت،من يه نمونه كد رو از يكي سايتا يافتم،لطفا استاد ميشه اين رو توضيح بديد ، نه كه فقط خروجي رو بخوام بدونم بلكه نحوه عملكرد كد رو ميخوام بدونم.

public class MyStatic {
 
   static int x = 6;
 
   MyStatic() {
      x ++ ;
   }
   void method(){
      System.out.print("-x" + x);
   }
   public static void main(String[] args){
      MyStatic mc1,mc2,mc3,mc4;
      MyStatic mc5 = new MyStatic();
      MyStatic mc6 = new MyStatic();
      MyStatic mc7 = new MyStatic();
      mc7.method();
   }
}

 

فایل پیوست

محمد پوررضا
محمد پوررضا

11 اردیبهشت 99

4
حذف شده

وقت بخیر

اسم کلاس ما MyStatic هست که در دل اون متد main جایی که کد ها اجرا میشوند توسط کامپایلر هست 

در این متد از کلاس ما instance های m1...m7 گرفته شده که از instance های 5 و 6 و 7  به اطلاح new شدند یا به فارسی مقدار دهی شدند .یعنی شی ساخته شده که داره اشاره میکنه به جایی از حافظه .

روی variable  شماره m7 متد .method() ثبت شده که این متد مسلما اجرا میشه 

اما چطوری (که در اینجا سوال شماست):

دقت کنید متد کانستراکتور وقتی شیی ساخته میشود کال خواهد شد که روی m5 ..56..m7 شی ساخته شده و به اطلاح مقدار دهی شدند و اگر دقت کنید متد کانستراکتور روی m5..m6..m7 ما کال شده (چون مقدار دهی شدند یا عبارت خارجی اینیشیالایز شدند) == پس نتیجه میگیریم متد سازنده ما سه بار صدا زده شده پس عدد شش ما به هفت و سپس به هشت و سپس به 9 تغییر میکند پس وقتی .method ما کال میشود مقدار 9 خواهد بود 

موفق باشید .

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

12 اردیبهشت 99

4
حذف شده

سلام محمد.در تکمیل جواب پوریا اینو بگم چون متغیر x استاتیک هست پس مربوط به خود کلاس میشه نه نمونه ای از کلاس یعنی متغیر instance variable،x نیست.ولی اگر استاتیک نبود چون متغیر مربوط میشد به نمونه کلاس ما هر چقدر هم که شی ایجاد کنیم چون instance variable هست مربوط میشه به همون نمونه از کلاس یعنی جواب x برابر با 7 میشه.

فایل پیوست

mohammad arefi

توسط

mohammad arefi

12 اردیبهشت 99

حذف شده
بله كاملا درسته و نكته جالب اين سوال هم همين موضوعي كه شما گفتيد بود،خيلي ممنون.
محمد پوررضا

14 اردیبهشت 99