تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ محمد پوررضا
سوال از نمونه كد
پوریا شفیعی حل شده توسط پوریا شفیعی

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

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();
   }
}

 

وقت بخیر

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

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

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

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

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

موفق باشید .

 

بهترین پاسخ
پوریا شفیعی ۱۲ اردیبهشت ۱۳۹۹، ۰۷:۱۱

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

mohammad arefi ۱۲ اردیبهشت ۱۳۹۹، ۱۰:۵۱