با سلام. سوال اول و سومتو اطلاعات ندارم ولی راجع به سوال دوم باید بگم جوابی که دوستمون enterprise دادن باید بگم ایشون اشتباه می کنن. چون اصولا مبحث استاتیک ربطی به گلوبال نداره. البته باید گفت که تو جاوا چیزی به عنوان گلوبال نداریم. معادل گلوبال public داریم.هر چند که سوال شما به این موضوع ربطی نداره اما جهت اطلاع اون دوستمون باید بگم که ما 4 تا شیوه دسترسی به اعضا کلاس(متغیرها و متدها) داریم :
1-public
2-package
3-protected
4-private
....... بگذریم.
و اما...... استاتیک : نمیدونم تا حالا شده از MessageBox یا توابع ریاضی توی جاوا استفاده کنین یا نه؟ اگر دیده باشین نحوه فراخوانی اونا با فراخوانی توابع معمولی یه کم فرق داره. نگاه کنین:
Math.Abs(-10);
JOptionPane.showMessageDialog(this,"salam");
در اینجا Math و JOptionPane با حروف بزرگ اومدن ونشون دهنده اسم کلاسشون هستن. اما یه سوال پیش میاد اونم اینه که چطوری میشه بدون اینکه شی ءی از یه کلاس ساخت به توابع(متدها) و متغیراش دسترسی داشت؟ کلید این موضوع دست استاتیکه!! ویژگی استاتیک اینه که به شیء وابسته نیست یا بهتر بگم اصلا از طریق شیء قابل دسترسی نیست و فقط با نام کلاس استفاده میشه . فرق متغیر استاتیک با متغیر معمولی اینه که متغیر معمولی در هر شیء مقدار منحصر بفردی داره و با هر بار ساختن یک شی از کلاس متغیر معمولی از مقدار پیش فرض خودش شروع میشه . اما اگر هزاران شیء از یه کلاس بسازیم متغیر استاتیک از اول مقداردهی نمیشه و همون مقداری که قبل داشته حفظ می کنه. حالا این عضو استاتیک هم میتونه یک متغیر باشه هم یه متد که میتونن public , private یا یکی از اون چهار حالتو داشته باشن. به این کد یه نگا بکنی می فهمی خروجیشم زیرش هست.
class TestStatic {
static int staticcounter = 0;
int dynamicCounter = 0;
public void increaseStaticCounter() {
TestStatic.staticcounter++;
}
public void increaseDynamicCounter() {
dynamicCounter++;
}
public int getStaticCounter() {
return TestStatic.staticcounter;
}
public int getDynamicCounter() {
return dynamicCounter;
}
}
public class Main {
public static void main(String[] args) {
TestStatic t1 = new TestStatic();
TestStatic t2 = new TestStatic();
t1.increaseDynamicCounter();
t1.increaseDynamicCounter();
System.out.println("t1.DynamicCounter = " + t1.getDynamicCounter());
t2.increaseDynamicCounter();
t2.increaseDynamicCounter();
t2.increaseDynamicCounter();
System.out.println("t2.getDynamicCounter = " + t2.getDynamicCounter());
t1.increaseStaticCounter();
t2.increaseStaticCounter();
t2.increaseStaticCounter();
t2.increaseStaticCounter();
System.out.println("t1.getStaticCounter() = " + t1.getStaticCounter());
System.out.println("t2.getStaticCounter() = " + t2.getStaticCounter());
TestStatic.staticcounter++;
TestStatic.staticcounter++;
System.out.println("t1.getStaticCounter() = " + t1.getStaticCounter());
System.out.println("t2.getStaticCounter() = " + t2.getStaticCounter());
}
}
اینم خروجیش :
t1.DynamicCounter = 2
t2.getDynamicCounter = 3
t1.getStaticCounter() = 4
t2.getStaticCounter() = 4
t1.getStaticCounter() = 6
t2.getStaticCounter() = 6