java, آموزش قدم به قدم جاوا, جاوا, شی گرایی در جاوا

متغیر static در جاوا (static variables)

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

در این جلسه تیم کدگیت را با آموزش متغیر static در جاوا همراهی کنید. پیش نیازهای این آموزش شامل موارد زیر است:

  1. آشنایی با متد
  2. آشنایی با شی گرایی
  3. آشنایی با constructor

Static در جاوا

کلمه کلیدی static در جاوا را ابتدای اولین برنامه ای که مینویسیم آن را میبینیم (منظور متد main است که static است) و شاید برای ما سوال شود این کلمه به چه معناست!! کلمه کلیدی static در جاوا اساسا برای مدیریت حافظه استفاده میشود. ما میتوانیم کلمه کلیدی Static را قبل از متغیرها، متدها و کلاسهای تو در تو قرار دهیم. نکته اساسی که در این کلمه کلیدی وجود دارد این است که static وابسته به کلاس است و نه شی!!! در این جلسه ما متغیر static در جاوا را توضیح میدهیم.

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

وقتی ما قبل از یک متغیر یا فیلد در کلاس واژه static را به کار ببریم، متغیر static در جاوا میگوییم. دو نکته را به یاد داشته باشید:

  1. متغیر static برای ویژگیهای(فیلدهای) عمومی همه اشیا به کار میرود(چون وابسته به کلاس است).
  2. این نوع متغیر فقط یک بار فضای کلاس را میگیرد و تمامی اشیا به آن به آن اشاره دارند!!!

مثال اول

با یک مثال ساده مطالب بالا را شرح میدهیم. فرض کنید یک کلاس داریم برای دانشجویان. این کلاس شامل سه فیلد Student id و name و college است. کد کلاس به صورت زیر است:

public class Student {

     int Student_id;
     String name;
     String College ="MIT";

}

حال فرض کنید ما 5000 دانشجو داریم. این دانشجویان وقتی در برنامه ساخته میشوند 5000 شی هستند که وارد حافظه ما میشوند. وقتی در یک دانشگاه باشیم شماره دانشجویی ها و نام ها با هم متفاوت است ولی نام دانشگاه برای همه یکسان است و اگر بخواهیم این کار را برای همه تکرار کنیم فقط حافظه اضافی گرفته میشود. بهترین راه حل استفاده از متغیر static در جاوا است. کد بالا را تغییر میدهیم و به صورت زیر مینویسیم:

public class Static_Student {

     int Student_id;
     String name;
     static String college = "MIT";

     Static_Student(int r, String n) {
          Student_id = r;
          name = n;
     }

     void display() {
          System.out.println(Student_id + " " + name + " " + college);
     }

     public static void main(String args[]) {
          Static_Student s1 = new Static_Student(111, "CodeGate1");
          Static_Student s2 = new Static_Student(222, "Codegate2");

          s1.display();
          s2.display();
     }

}

در کد بالا متغیر college متغیری static است و برای تمام اشیا که ساخته میشود یکسان است و فقط یک مکان از حافظه را میگیرد و نه بیشتر!!!

مثال دوم

مثال دوم متغیر static در جاوا مثالی ساده است اما کاربردی!!! فرض میکنیم ما کلاسی به نام Counter داریم که فیلدی به نام count در آن است برای شمارش. هدف ما این است که تعداد اشیا ساخته شده از این کلاس را شمارش کنیم. پس درون constructor آن متغیر را به یک جمع میکنیم. ابتدا کد بدون متغیر static را ببینید:

public class Counter {

     int count = 00;// will get memory when instance is created

     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

همانطور که میبینید هر موقع شی ساخته میشود خروجی 1 نمایش داده میشود دلیل این است که متغیر count برای هر شی جدا و درون خودش است و در ابتدا نیز 0 است!!! حال کد Static شده را ببینید:

public class Static_Counter {

     static int count = 00;// will get memory only once and retain its value

     Static_Counter() {
          count++;
          System.out.println(count);
     }

     public static void main(String args[]) {

          Static_Counter c1 = new Static_Counter();
          Static_Counter c2 = new Static_Counter();
          Static_Counter c3 = new Static_Counter();

     }

}

خروجی کد بالا:

1
2
3

همانطور که در خروجی میبینید هر موقع اشیا ساخته شده به شمارنده یکی اضافه میشود. و دیگر هر شی شمارنده خاص خود را ندارد و تمام اشیا یک شمارنده دارند!! این یکی از خواص متغیر Static در جاوا است!!

نوشته های مشابه

4 دیدگاه در “متغیر static در جاوا (static variables)

  1. مهرداد گفت:

    مرسی واسه زحمتی که می‌کشید.

  2. مصطفی گفت:

    عالی عالی عالی

  3. لیلی گفت:

    معرکه

  4. بسیار واضح و قابل درک توضیح دادی، ممنون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *