اعضای static

اگر بخواهیم عضو داده‌ای (فیلد) یا خاصیتی ایجاد کنیم که در همه نمونه‌های کلاس قابل دسترسی باشد از کلمه کلیدی static استفاده می‌کنیم. کلمه کلیدی static برای اعضای داده‌ای و خاصیت‌هایی به کار می‌رود که می‌خواهند در همه نمونه‌های کلاس تقسیم شوند. وقتی که یک متد یا خاصیت به صورت static تعریف شود، می‌توانید آنها را بدون ساختن نمونه‌ای از شی، فراخوانی کنید. به چند مثال توجه کنید :

   1: package myfirstprogram;
   2: 
   3: class SampleClass
   4: {
   5:    public static String StaticMessage  = "This is the static message!";
   6: } 
   7: 
   8: public class MyFirstProgram 
   9: {
  10:     public static void main(String[] args) 
  11:     {        
  12:         System.out.println(SampleClass.StaticMessage );  
  13:     }    
  14: }
This is the static message!

در مثال بالا یک شیء استاتیک به نام StaticMessage (خط 5) تعریف کرده‌ایم. مقدار شی StaticMessage در همه نمونه‌های کلاس SampleClass قابل دسترسی است. برای فراخوانی یک متد، خاصیت و یا یک متغیر استاتیک، به سادگی می‌توان نام کلاس و بعد از آن علامت دات ( . ) و در آخر نام متد یا خاصیت را نوشت. این موضوع را می‌توان در خط (12) مشاهده کرد. مشاهده می‌کنید که لازم نیست هیچ نمونه‌ای از کلاس ایجاد شود. یکی دیگر از کاربردهای این کلمه کلیدی در شمارش اشیاء است. به مثال زیر توجه کنید :

   1: package myfirstprogram;
   2: 
   3: class SampleClass
   4: {
   5:    public static int number  = 1;
   6:    
   7:    public SampleClass()
   8:    {
   9:         System.out.println("Number is : " + number++);
  10:    }
  11: } 
  12: 
  13: public class MyFirstProgram 
  14: {
  15:     public static void main(String[] args) 
  16:     {        
  17:         SampleClass Sample1 = new SampleClass ();
  18:         SampleClass Sample2 = new SampleClass ();
  19:         SampleClass Sample3 = new SampleClass ();
  20:     }    
  21: }
Number is : 1
Number is : 2
Number is : 3

همانطور که در خط 5 کد بالا مشاهده می‌کنید یک متغیر استاتیک با مقدار اولیه 1 ایجاد کرده‌ایم و در داخل سازنده کلاس در خط 9 ابتدا مقدار آن را چاپ و سپس یک واحد به آن اضافه کرده‌ایم. حال در خطوط 19-17 سه شیء از روی کلاس SampleClass ایجاد می‌کنیم. همانطور که در خروجی مشاهده می‌کنید با هر بار ایجاد شیء یک بار سازنده کلاس فراخوانی و در نتیجه مقدار متغیر چاپ می‌شود. یکی از خواص متغیرهای استاتیک این است که مقدار قبلی خود را حفظ می‌کنند. و از این خاصیت در مثال بالا برای شمارش اشیاء ساخته شده از کلاس استفاده کرده‌ایم.