OCA Java imtahan mövzuları

Static vs Instance

İmtahanda digər bir qrup çaşdırıcı suallar staticinstance member`lər (member = field + method) ilə əlaqəli suallardır. Əsas bilinməsi vacib olan qaydalar aşağıdakılardır:

  • static member instance member`i birbaşa çağıra bilməz;
  • instance metod static metodun daxilində yalnız classın instansı istifadə olunaraq çağırıla bilər;
  • static metodu class daxilində başqa bir static metodun içində class adı və ya instansı olmadan çağırmaq mümkündür;
  • instance metod class daxilində başqa bir instance metodun içində referans dəyişəni istifadə olunmadan çağırıla bilər;
  • static metod instance metodun daxilində çağırıla bilər.
public class Static {
  private String name = "Static class";
  public static void first() { }
  public static void second() { }
  public void third() { System.out.println(name); }    // line1

  public static void main(String[] args) {
     first();
     second();
     third();                // line2,  DOES NOT COMPILE
     new Static().third();   // line3
} }

Instance metod line3`də göstərilən qaydada çağırılmalıdır. Əgər third() metodunu static etsək, o zaman line2 compile olunacaq, amma line1`də compile xətası çıxacaq. Çünki name dəyişəni static deyil və static metodda ancaq classın instansı istifadə olunaraq çağırıla bilər ya da həmin dəyişən özü də static olmalıdır.

public class Gorilla {
    public static int count;
    public static void addGorilla(){ count++; }
    public void babyGorilla() { count++; }
    public void announceBabies() {
        addGorilla();
        babyGorilla();
    }   
    public static void announceBabiesToEveryone(){
        addGorilla();
        babyGorilla();      // DOES NOT COMPILE
    }   
    public int total;
    public static double average = total / count;   // DOES NOT COMPILE    
}

Sonuncu sətirin compile olunması üçün total dəyişəninin də static olması lazımdır.

Static və instance dəyişənlərə dəyər mənimsədilməyibsə, avtomatik olaraq default dəyərlər mənimsədilir.

public class Counter {

    private static int count;
    private int count1;

    public Counter() {
        count++;
        count1++;
    }

    public static void main(String[] args) {
        Counter c1 = new Counter();
        c1.test();
    }

    public void test() {
        Counter c2 = new Counter();
        Counter c3 = new Counter();
        System.out.println(count);    // 3
        System.out.println(count1);   // 1
    }
}

 

[topics lang=az]

About the author

Mushfiq Mammadov

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.