İmtahanda digər bir qrup çaşdırıcı suallar static və instance 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]
