با سلام و خدا قوت،من يه نمونه كد رو از يكي سايتا يافتم،لطفا استاد ميشه اين رو توضيح بديد ، نه كه فقط خروجي رو بخوام بدونم بلكه نحوه عملكرد كد رو ميخوام بدونم.
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 میشه.