💡 کلمه کلیدی static برای مدیریت حافظه استفاده میشود.
💡 کلمه کلیدی استاتیک در جاوا میتواند برای متغیرها و متدهایی که متعلق به یک کلاس هستند (متغیر های نمونه و متد هایی که در بدنه کلاس تعریف میشوند) استفاده شود.پس متغیر های محلی نمیتوانند استاتیک باشند.
💠 خب چطور یک متغیر را static اعلام کنیم؟
🔵 دسرسی اشیای ساخته شده از یک کلاس به متغیر استاتیک:
💡 وقتی یک متغیر یا متد در کلاس استاتیک اعلام میشود دیگر نیاز نیست برای دسرسی به آن متغیر یا متد شی از کلاس ساخت تنها کافیست مستقیم با استفاده از نام کلاس و کاراکتر نقطه (.) به ان متغیر یا متد دسرسی پیدا کرد البته بدون نام کلاس هم میشود مستقیم تنها با بکار بردن نام متغیر از آن استفاده کرد اما در جاهایی که متغیر محلی هم نام متغیر نمونه کلاس خود داریم باید از نام کلاسبرای صدا زدن متغیر یا متد استفاده کنیم:
در مثال زیر متغیر و متد استاتیک یک کلاس را در متد main بدون شی ساختن و بکار بردن مستقیم نام کلاس صدا زده ایم.
package tutorial; n = "pishy"; } } |
خروجی:
cat Eating pishy |
✔ همان طور که مشاهده میکنید چون متد ()eat و متغیر n استاتیک هستند دیگر برای صدا زدنشون نیاز به ساختن شی نیست.
✔ حالا در پایین میخواهیم از متد () sleep استفاده کنیم چون استاتیک نیست باید با استفاده از شی ساخته شده از کلاس آن را صدا زد:
package tutorial; } } |
خروجی:
cat sleep ing cat Eating name= pishy, age= 6 |
و در مثال زیر چون از متغیر محلی همنام با متغیر نمونه n در متد main داریم دیگه واجب میشه که برای صدا زدن متغیر استاتیک از نام کلاس و نقطه(.) و اسم متغیر استفاده کنیم:
package tutorial; } |
خروجی:
cat sleep ing cat Eating name= bobo name= pishy |
توضیحات:
n = "pishy"; String n="bobo"; |
System.out.println("name= "+n); System.out.println("name= "+Cat.n); |
✔ همان طور که گفتیم اگر همزمان یک متغیر محلی همنام با متغیر نمونه استاتیک وجود داشت ناچار هستیم از نام کلاس برای صدا زدن متغیر استفاده کنیم.
مزایای متغیرهای استاتیک: در صرفه جویی حافظه برنامه شما موثر است.
در دو مثال زیر تفاوت متغیر استاتیک و غیر استاتیک را درک خواهیم کرد:
وقتی متغیر غیر استاتیک باشد:
package javalike ; class Counter { Counter() { public static void main(String args[]) { Counter c1 = new Counter(); } |
خروجی:
1 1 1 |
✔ ما در این مثال متغیر نمونه count را غیر استاتیک تعریف کردیم و درون سازنده کلاس دستور افزایش یکی یکی این متغیر را پیاده سازی کردیم که با هربار شی ساختن این متغیر مقدارش افزایش پیدا کند اما چون با هر بار شی ساختن یک کپی از ویژگی ها و رفتار های غیر استاتیک کلاس برای شی ایجاد میشود، پس با هربار شی ساختن یک count با مقدار صفر برای شی درنظر گرفته میشود که در سازنده کلاس وقتی count++ میشود مقدارش یکی اضاف و به 1 تغییر داده میشود و سپس در خروجی نمایش داده میشود.
وقتی متغیر استاتیک باشد:
package javalike ; class Counter { Counter() { public static void main(String args[]) { Counter c1 = new Counter(); } |
خروجی:
1 2 3 |
✔ ما در این مثال متغیر نمونه count را استاتیک تعریف کردیم و درون سازنده کلاس دستور افزایش یکی یکی این متغیر را پیاده سازی کردیم که با هربار شی ساختن این متغیر مقدارش افزایش پیدا کند،چون متغیر استاتیک هست تنها یک حافظه به متغیر اختصاص داده میشود و همه اشیای ساخته شده از کلاس به این یک متغیر دسرسی دارند و اگر با یک شی مقدار این متغیر را تغییر دهیم مقدار متغیر برای سایر اشیا نیز تغییر میکند. و در اینجا وقتی c1 ساخته میشود مقدار count برابر 1و با ساخته شدن c2 مقدار count برابر 2 و در نهایت با ساخته شدن شی c3 مقدار count برابر 3 میشود.
✔ متد ها نیز میتوانند مانند متغیر ها استاتیک باشند اگر در ابتدای متد از کلمه کلیدی static استفاده کنیم.
✔ مانند متغیر ها اگر متد استاتیک باشد برای استفاده و صدا زدن متد نیاز به شی ساختن از کلاس نیست.
✔ متدهای استاتیک برای دسرسی به متغیر های استاتیک و دستکاری انها به کار میرود.
package tutorial; static void setName(String n) { public Cat(){ public static void main(String[] args) {
Cat.setName("pishi");
} |
خروجی:
name=pishi |
توضیحات:
static String name; int age; |
✔ تعریف دو متغیر یکی از نوع رشته و استاتیک و دیگری از نوع عدد صحیح و غیر استاتیک
static void setName(String n) { name=n; } |
✔ این متد که از نوع void و استاتیک است، یک رشته(String) میگیرد و متغیر رشته name که استاتیک هم است مقدار دهی میکند.
public Cat(){ name="miuuuu"; } |
سازنده کلاس گربه که وقتی هر شی از این کلاس ساخته شد متغیر name را مقداردهی اولیه میکند.
public void show(){
public static void main(String[] args) {
Cat.setName("pishi");
|
✔ برای اجرای برنامه نیاز به متد main داریم که درآن یک شی از کلاس Cat ساخته ایم و در خط بعد چون متد setName استاتیک هست نیازی نیست با شی آن را صدا بزنیم فقط کافیست با نام کلاس ،نقطه(.) و نام متد آن را فراخوانی کنیم.
✔ درپایان با متد show مقدار متغیر را در خروجی چاپ میکنیم.
💡 یک نکته در مورد متدهای استاتیک:
متد های استاتیک نمیتوانند در بدنه خود متغیر های غیر استاتیک را دستکاری کنند!!!
...ادامه این جلسه آموزشیرا میتوانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)
لینک دانلود
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690