CodeGym /Kurslar /Java SELF AZ /Dəyişənlərin Görünüşü

Dəyişənlərin Görünüşü

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Lokal dəyişənlər

Gəlin, dəyişənlər haqqında bir az daha ciddi danışaq. Ancaq bu dəfə onların daxili quruluşunu yox, onlar olduğu kod ilə qarşılıqlı əlaqələrini müzakirə edəcəyik.

Bütün dəyişənlər, hansı ki metodların içində elan edilir, lokal dəyişənlər adlanır. Lokal dəyişən yalnız olduğu kod blokunda mövcuddur. Daha dəqiq desək, elan edildikdən sonra və olduğu kod blokunun sonuna qədər mövcuddur.

Sadəlik üçün bir nümunəyə baxaq:

Kod Dəyişənlərin əlçatanlığı
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

Gəlin, lokal dəyişənlərin əlçatanlığı haqqında bir daha danışaq. Budur, fiqurlu mötərizələrdən ibarət bir kod bloku: bu, metodun gövdəsi, dövr operatorunun gövdəsi və ya sadəcə şərt operatorunun kod bloku ola bilər. Kod blokunda elan edilən dəyişən bu blokun sonuna qədər mövcuddur.

Əgər dəyişən dövr operatorunun gövdəsində elan edilirsə, o, yalnız həmin dövr operatorunun gövdəsində mövcud olur. Hər bir dövr iterasiyasında yaradılaraq məhv edilir.

Bir metod daxilində eyni ada malik iki lokal dəyişəni elan etmək mümkün deyil — proqram kompilyasiya olunmayacaq. Amma olar, əgər dəyişənlərin olduğu kod blokları üst-üstə düşmürsə.

Nümunə:

Kod Dəyişənlərin əlçatanlığı
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

b adı ilə ikinci lokal dəyişəni yalnız ona görə elan edə bildik ki, b adlı ilk dəyişən, ikinci b dəyişəninin elan edildiyi kod blokunda görünmür.


2. Parametr-dəyişənlər

Əvvəl də dediyimiz kimi, hər bir metodun parametr-dəyişənləri ola bilər. Bəs onların görünürlüyü və yaşam müddəti necədir?

Burada hər şey olduqca sadədir. Parametr-dəyişənlər metodun koduna idarənin ötürülməsi zamanı yaradılır (metodun kodu icra olunmağa başlayır) və metodun işi tamamlananda silinir. Onlar metodun bütün daxilində görünürlər.

Nümunə:

Kod Dəyişənlərin əlçatanlığı
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

Əvvəl də dediyimiz kimi, args — bu sadəcə string massiv tipində olan bir dəyişəndir. Və bütün parametr-dəyişənlər kimi, o da metodun daxilində hər yerdə əlçatandır. Amma nümunələrimizdə onu adətən nəzərə almırıq.



3. Sinifin dəyişənləri

Birinci səviyyə mühazirələrindən xatırladığınız kimi, sinif funksiyalar və dəyişənlərdən ibarət ola bilər. Funksiyalar adətən "sinif metodları", dəyişənlər isə "sinifin dəyişənləri" və ya "sinifin sahələri" adlandırılır. Əslində Java çərçivəsində bunlar sinonimdir.

Bəs sinifin dəyişənləri (və ya sahələri) nədir?

Sinifin dəyişənləri metod daxilində deyil, sinif daxilində elan edilən dəyişənlərdir.

Bunlara sinifin istənilən metodundan müraciət etmək olar. Kobud desək, sinifin dəyişənləri — sinifin bütün metodları üçün ümumi dəyişənlərdir.

Nümunə:

Kod Dəyişənlərin əlçatanlığı
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     count++;
   }

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum

Bu nümunədə bizdə iki metod var — add()remove(). add() metodu sinifin sumcount dəyişənlərini artırır, remove() metodu isə sumcount dəyişənlərini azaldır. Hər iki metod sinifin ümumi dəyişənləri ilə işləyir.

Lokal dəyişənlər metod yerinə yetirildiyi müddətcə mövcuddur. Sinifin isə dəyişənləri həmin dəyişənlərin aid olduğu sinif obyektləri mövcud olduğu müddətcə mövcuddur. Sinif obyektləri haqqında növbəti səviyyədə daha ətraflı öyrənəcəksiniz.


4. Statik dəyişənlər

Sinif dəyişənləri, sinif metodları kimi, statik və qeyri-statik (adi) ola bilər. Statik metodlar yalnız statik dəyişənlərə müraciət edə bilər.

11-ci səviyyədə biz statik dəyişənlər və metodların quruluşunu öyrənəcəyik və bu məhdudiyyətlərin səbəblərini başa düşəcəyik.

Bir sinif dəyişənini statik etmək üçün, onu elan etməzdən əvvəl static açar sözünü yazmaq lazımdır.

Statik dəyişənlər, elan edildiyi sinifin obyektlərinə deyil, birbaşa həmin sinifə bağlıdır. Buna görə onlar mövcuddur, hətta həmin sinifin heç bir obyekti yaradılmadıqda belə. Digər siniflərdən onlara müraciət etmək üçün aşağıdakı konstruksiyadan istifadə edə bilərsiniz:

ClassName.variableName

Nümunə:

Kod Dəyişənlərin əlçatanlığı
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

Yuxarıdakı nümunədə biz ayrıca bir Storage sinif yaratdıq, count və sum dəyişənlərini oraya çıxardıq və onları statik elan etdik. İctimai statik dəyişənlərə proqramın istənilən metodundan müraciət etmək mümkündür (və yalnız metoddan deyil).



Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION