menusearch
javapro.ir

♨️ جلسه دوازدهم - کلمه کلیدی static

جستجو
شنبه ۵ آذر ۱۴۰۱ | ۱۲:۶:۶
۱۳۹۵/۸/۱ شنبه
(7)
(0)
♨️ جلسه دوازدهم - کلمه کلیدی static
♨️ جلسه دوازدهم -  کلمه کلیدی 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 اعلام کنیم؟

اعلام یک متغیر از نوع استاتیک   
متغیر استاتیک تنها یک حافظه از کلاس را می‌گیرد یعنی مقدارش برای همه اشیای ساخته شده از کلاس یکسان است. برای روشن تر شدن این مطلب فرض کنید یک کلاس سگ داریم و ویژگی نام سگ استاتیک است اگر ما 10 سگ از این کلاس سگ بسازیم و نام "جسی" را روی یک سگ بگذاریم نام همهی 10 سگ جسی خواهد شد زیرا متغیر نام استاتیک یا یکتا بوده و برای همه اشیای یک کلاس یکی است، در زیر برای درک بهتر تفاوت دسرسی اشیای ساخته شده از یک کلاس به متغیر استاتیک و غیر استاتیک آماده است:

🔵 دسرسی اشیای ساخته شده از یک کلاس به متغیر غیراستاتیک:

متغیر استاتیک در جاوا

 
 🔵 دسرسی اشیای ساخته شده از یک کلاس به متغیر استاتیک:

متغیر static در جاوا

💡 وقتی یک متغیر یا متد در کلاس استاتیک اعلام می‌شود دیگر نیاز نیست برای دسرسی به آن متغیر یا متد شی از کلاس ساخت تنها کافیست مستقیم با استفاده از نام کلاس و کاراکتر نقطه (.) به ان متغیر یا متد دسرسی پیدا کرد البته بدون نام کلاس هم می‌شود مستقیم تنها با بکار بردن نام متغیر از آن استفاده کرد اما در جاهایی که متغیر محلی هم نام متغیر نمونه کلاس خود داریم باید از نام کلاسبرای صدا زدن متغیر یا متد استفاده کنیم:

 

    در مثال زیر متغیر و متد استاتیک یک کلاس را در متد 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 sleep ing");
   }
   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 sleep ing");
   }
   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 sleep ing
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 sleep ing");
   }
   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 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 {
   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 شده) در لینک زیر دریافت کنید.

 


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

آموزش آسان و ساده زبان برنامه نویسی جاوا
لینک دانلود

 

 


 

instagram
نظرات کاربران
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

بستن
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

1 نظر
سینا
دوشنبه ششم آبان ۹۸
پاسخ
(1)
()
سینا
تيتر نمودار متغيير استاتيک و غير استاتيک اشتباه است
پاسخ مدیر سایت
سلام.اصطلاح شد.از اطلاع رسانی شما سپاسگزارم
پاسخ مدیر سایت
هدر سایت
زودتر از دیگران از جدیدترین مطالب آموزشی برنامه نویسی جاواپرو اطلاع پیدا کن
 شاید برای شما کم اهمیت باشد; اما حمایت مالی به جاواپرو جان می‌دهد
سوالات متداول برنامه نویسی