معنای لغوی کلیدواژۀ static «ثابت» است و این کلیدواژۀ تعریف میشود برای:
به طور کلی زمانی که این کلید واژه برای یک عضو از کلاس استفاده بشه عضو مورد نظر وابسته به کلاس میشه و ربطی به instanceهای کلاس نداره و در طی زمان اجرای برنامه بدون نیاز به newکردن در دسترسه.
کلید واژهی static در جاوا برای اعضای داخل کلاس استفاده میشه.
باعث میشه که مقدار منتسب به متغیر صرفاً یک مرتبه مقداردهی بشه یعنی تنها یک مکان از حافظه به چنین متغیرهایی اختصاص داده میشه. در سایر نقاط برنامه میتوان این متغیر را مجدداً مقداردهی کرد و مقدار را تغییر داد ولی باید بددانیم که آخرین مقداری که به آن منتسب شده ذخیره میشود.
نکته: با در نظر گرفتن Modifier سطح دسترسی متغیر (public , protected , private) میشه متغیر رو در کلاس های دیگه نیز صدا زد.
فرم کلی:
صدا زدن متغیر:
مانند فیلد های استاتیک وابسته به کلاسند و بدون نیاز به نمونه سازی با استفاده از اسم کلاس صداشون می زنیم.
نکته: اگر متدی به صورت Static تعریف کنیم، هم از طریق نام کلاس و هم از طریق نام instance قابل فراخوانی است. اگر متدی غیر استاتیک تعریف شود طبعا تنها از طریق نام instance قابل فراخوانی است.
نکته خودمونی: من میگم خودتون میدونید کی متدی را static یا nonStatic تعریف کنید. اما ترجیحا متدی را استاتیک نکنید به جز متد main و یا متدهایی که برای پیاده سازی Singletone design pattern است.
به دلیل آن که در متدهای static شما یک محدودیت بزرگ خواهید داشت و آن محدودیت آن است که دسترسی به current instance و به عبارتی instance جاری و یا به عبارتی دیگر کلمهی کلیدی this نخواهید داشت.
مثال فرم کلی:
نحوه صدا زدن:
چنین متدهایی به متغیرهای استاتیکِ مرتبط با کل کلاس یا به زبان دیگه به متغیرهای استاتیکِ مربوط به تمامی آبجکتهای ساختهشده از روی آن کلاس دسترسی دارن.
فقط کلاس های داخلی یا همون Inner Class ها رو میشه به صورت استاتیک تعریف کرد.
نحوه newکردن یک inner class:
چرا main استاتیک است؟ چون بدون وجود instance بتونه ران بشه. یعنی در اول برنامه هیچ شی از کلاس ساخته نمی شود، بنابراین متد Main باید فراخوانی شود تا برنامه به حالت اجرایی درآید. گاهی اوقات متد main نقطه شروع برنامهست. تعریف آن به عنوان متد static فضای اجرا را قادر می سازد تا Main را بدون ساختن نمونه ای از آن کلاس فراخوانی کند.
فعلا