Local Variables
Lokal dəyişənlər metod daxilində yaradılmış dəyişənlərdir. Lokal dəyişənlərin varsayılan (default) dəyəri olmur, ona görə də onları istifadə etməzdən əvvəl mütləq dəyər mənimsədilməlidir.
Aşağıdakı kod nümunəsi üzərindən davam edək:
public void testLocalInitialization() { int count = 5; int number; if (count > 5) number = 1; else if (count <= 5) number = 2; System.out.println(number); // doesn`t compile }
number
dəyişəninə dəyər mənimsədilməmiş istifadə edildiyinə görə compile error verir. Biz fikirləşə bilərik ki, axı if
şərtinin içərisində dəyər mənimsədilib, count
ya 5-dən böyükdür, ya bərabərdir, ya da kiçikdir. Axı istənilən halda bu iki şərtdən biri ödənəcək. Bəs onda niyə compiler number
`i dəyəri mənimsədilməmiş kimi görür?! Çünki compile time vaxtı compiler bunu təyin edə bilmir, ancaq run edildikdən sonra bilir. Amma əgər biz count
dəyişənini final elan etsək o zaman compile olunacaq. Və yaxud da sona else
ifadəsi əlavə etsək, compile olunacaq. Çünki if-else
strukturunda dəyər mənimsədildikdə compiler başa düşür ki, heç bir şərtdən asılı olmayaraq istənilən halda if
şərti ödənməsə, else
blokuna müraciət olunacaq və dəyər mənimsədiləcək.
public void testLocalInitialization() { int count = 5; int number; if (count > 5) number = 1; else if (count <= 5) number = 2; else number = 3; System.out.println(number); // does compile }
Dəyişən final
elan edildikdə isə compiler başa düşür ki, həmin dəyişənin dəyəri heç vaxt dəyişə bilməz və ona görə də compiler həmin dəyişənin dəyərini birbaşa şərtə qoyub yoxlayır.
public void testLocalInitialization() { final int count = 5; int number; if (count > 8) number = 1; else if (count <= 4) number = 2; System.out.println(number); // doesn`t compile }
Bu şəkildə də başa düşə bilərik:
if (5 > 8) number = 1;
else if (5 <= 4) number = 2;
Əgər şərtlərdən biri geriyə true dəyər qaytararsa, kod compile olacaq:
if (5 > 8) number = 1;
else if (5 <= 5) number = 2;
Instance and Class Variables
Java`da local dəyişənlərdən əlavə instance və class dəyişənləri də mövcuddur. Instance dəyişənlər həm də “fields” adlandırılır. Instance və class dəyişənlər lokal dəyişənlərdən fərqli olaraq class`ın daxilində, amma metodun xaricində elan edilir. Lokal dəyişənlərdən digər fərqləri isə odur ki, bu növ dəyişənlər istifadə edilmədən öncə dəyər mənimsədilməsi (initialize) tələb etmir. Instance və class dəyişənlər artıq elan olunan vaxtı onlara susmaya görə (default) dəyər mənimsədilir. Susmaya görə dəyərlərlə aşağıdakı cədvəldən tanış ola bilərsiniz:
Dəyişənin tipi |
Mənimsədilən default dəyər |
boolean |
false |
byte, short, int, long |
0 |
float, double |
0.0 |
char |
'\u0000' |
Bütün obyekt tipləri üçün | null |
Class dəyişənləri ilə instance dəyişənlərinin fərqi isə odur ki, class dəyişənlərin önündə static
açar sözü yazılır, buna görə də bu dəyişənlər həm də static dəyişənlər adlandırılır. Static dəyişənlər classın instansını yaratmadan birbaşa class adının özü ilə müraciət etməklə digər classlarda çağırıla bilər. Növbəti chapter`lərdə bu barədə daha ətraflı məlumat veriləcək.