استفاده از متغیرهای static در جاوا

چاپ

به متدهایی از یک کلاس، که بدون نمونه گیری (و ایجاد شیء) می توانیم از آنها استفاده کنیم، متدهای استاتیک(static) گفته می شود. این موضوع را در فصل 3 آموزش داده ایم.بعنوان مثال، متد ()main یک متد استاتیک است و بدون نیاز به ایجاد یک شیء می توانیم آن را صدا بزنیم و مورد استفاده قرار دهیم. به متدهایی که برای استفاده از آنها، باید از کلاس آنها نمونه گیری کنیم(یعنی شیء ایجاد کنیم)، متدهای غیراستاتیک گفته می شود.

نکته

به متدهای static مرجع this تعلق نمی گیرد زیرا به هیچ شیء ای مرتبط نیستند بنابراین به آنها، متدهای کلاس(class methods) گفته می شود. 

می توانیم متغیرها را نیز از نوع استاتیک تعریف کنیم. به متغیرهای استاتیک، متغیرهای کلاس نیز گفته می شود. متغیرهای غیراستاتیک درون یک کلاس، که به آنها متغیرهای نمونه نیز گفته می شود، در هر شیء ایجاد شده از آن کلاس به طور مستقل وجود دارند، اما در هر کلاس، از متغیرهای استاتیک تنها یک نمونه وجود دارد.

 بعنوان مثال، کلاس BaseballPlayer که در تصویر 4.29 نشان داده شده است را در نظر بگیرید. کلاس BaseballPlayer حاوی یک متد static به نام count است که به صورت رنگی نشان داده شده است.

همچنین این کلاس حاوی دو متغیر غیر استاتیک به نام های number  و battingAverage است. همان طور که مشاهده می کنید، constructor کلاس BaseballPlayer مقادیر را به متغیرهای number  و battingAverage می دهد و به متغیر count یک واحد اضافه می کند.

به عبارت دیگر، هر موقع که یک شیء از کلاس BaseballPlayer ساخته می شود، مقادیری منحصر به فرد در داخل متغیرهای number  و battingAverage قرار می گیرند. و متغیر count نیز تعداد اشیاء ایجاد شده از این کلاس را می شمارد و آن را در تمام اشیاء کلاس BaseballPlayer به اشتراک می گذارد(یعنی همه ی اشیاء می توانند به آن مقدار شمارش شده دسترسی داشته باشند). 


 


کلاس نشان داده شده در تصویر 4.30 یک اپلیکیشن است که ابتدا از کلاس BaseballPlayer دو شیء ایجاد می کند سپس متد ()showPlayer از این دو کلاس را فراخوانی می کند. سپس یک شیء دیگر از کلاس BaseballPlayer ایجاد می کند و دوباره همان متد را از این شیء فراخوانی می کند. 

حالا همان طور که در تصویر 4.31 مشاهده می کنید، زمانی که دو شیء اول تعریف می شوند، مقدار متغیر count برابر با 2 می شود.زیرا  متغیر count در شیء aCatcher و aShortstop در دسترس است. حالا وقتی که شیء سوم را تعریف کنیم، مقدار متغیر count برابر با 3 می شود. 

به عبارت دیگر، به دلیل اینکه درconstructor این کلاس، به متغیر استاتیک count یک واحد اضافه می شود، هر شیء از این کلاس، به تعداد اشیاء ایجاد شده(یعنی متغیر count) دسترسی دارد. هر تعداد شیء که از کلاس BaseballPlayer ایجاد کنیم، به مقدار متغیر count دسترسی خواهد داشت. 

 نکته: متدهای static قادر نیستند تا به متغیرهای نمونه دسترسی داشته باشند، اما متدهای نمونه(instance methods) می توانند به هر دوی متغیرهای استاتیک و نمونه دسترسی داشته باشند.