خلاصه مطلب
در این آموزش با مفهوم کلمه کلیدی static آشنا می شویم
فهرست جلسات دوره مقدماتی جاوا
مقدمه اول | جاوا چیست؟
مقدمه دوم | تاریخچه جاوا
مقدمه سوم | ویژگیهای زبان جاوا
جلسه اول | راهنمای دانلود و نصب JDK
جلسه دوم | اجرای یک برنامه جاوا در Notepad
جلسه سوم | راهنمای دانلود و نصب Eclipse
جلسه چهارم | ساخت اولین برنامه جاوا در Eclipse
جلسه پنجم | متغیر ها در جاوا
جلسه ششم | تغییر فونت محیط Eclipse
جلسه هفتم | عملگرهای پایه ای جاوا
جلسه هشتم | دستورات شرطی
جلسه نهم | اشیا و کلاس ها
جلسه دهم | ورودی گرفتن
جلسه یازدهم | حلقههای کنترلی
جلسه دوازدهم | کلمه کلیدی static
جلسه سیزدهم | کلاس Math
جلسه چهاردهم | کلاس String
جلسه پانزدهم | آرایههای یک بعدی
جلسه شانزدهم | کنترل سطح دسرسی (Modifiers)
جلسه هفدهم | متدها در جاوا
جلسه هجدهم | کلمه کلیدی this
جلسه نوزدهم | کلاسهای داخلی
جلسه بیستم | ارث بری در جاوا
جلسه بیست و یکم | کلمه کلیدی final
جلسه بیست و دوم | Overriding در جاوا
جلسه بیست و سوم | Polymorphism( چند ریختی)
جلسه بیست و چهارم | چندریختی را بهتر یادبگیرید
جلسه بیست و پنجم | Abstraction( انتزاع)
جلسه بیست و ششم | Encapsulation(کپسوله سازی)
جلسه بیست و هفتم | اینترفیس (Interface)
جلسه بیست و هشتم | کلاس Random
جلسه بیست و نهم | Exceptions (استثناها)
جلسه سی ام | کار با فایل در جاوا(Files and I/O)
جلسه سی و یکم | کلاس InputStreamReader
جلسه سی و دوم | کلاس OutputStreamWriter
جلسه سی و سوم | کلاس BufferedReader
جلسه سی و چهارم | کلاس BufferedWriter
جلسه سی و پنجم | Serialization در جاوا
جلسه سی و ششم | چندنخی(Multithreading)
جلسه سی و هفتم | آرایه دو بعدی در جاوا
جلسه سی و هشتم | کلاس ArrayList در جاوا
جلسه سی و نهم | Non Access Modifier در جاوا

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

این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)لینک دانلود
.png)
.png)

