İ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]