CodeGym /Kurslar /Java SELF AZ /Statik Dəyişənlər

Statik Dəyişənlər

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

1. Statik dəyişənlər

Klass yaddaşa yüklənəndə, dərhal onun üçün statik klass obyekti yaradılır. Bu obyekt klassın statik dəyişənlərini (klassın statik sahələri) saxlayır. Statik klass obyekti mövcuddur, hətta bir dənə də normal klass obyekti yaradılmasa belə.

Klassda dəyişənləri təsvir edərkən, bu dəyişənlərin yalnız bir dəfə yaradılacağını, yoxsa hər obyekt üçün onların surətinin yaradılması lazım olub-olmayacağını göstəririk. Varsayılan olaraq hər obyekt üçün dəyişənin yeni bir surəti yaradılır.

Statik (static) dəyişən isə statik klass obyektinə bağlıdır və həmişə yalnız bir nüsxədə mövcuddur.

Klass üçün statik dəyişən yaratmaq üçün onun adından əvvəl static açar sözünü yazmaq lazımdır. Statik dəyişənlərin təsviri ümumi şəkildə belədir:

static Tip ad = dəyər;

Əgər statik dəyişənə başlanğıc dəyəri təyin olunmazsa, o, varsayılan dəyər ilə başlanğıc dəyərlə təyin edilir:

Tip Varsayılan dəyər
byte
0
short
0
int
0
long
0
float
0.0
double
0.0
char
'\u0000'
(bu da
0
ilə eynidir)
boolean
false
Object
və istənilən siniflər
null

Nümunələr:

Kod
public static int WIDTH = 100;
public static String message = "Salam";
private static Scanner console;
private static int count = 0;
private static boolean flag;

Statik dəyişənə onun sinfində sadəcə adı ilə müraciət etmək olar. Əgər müraciət başqa bir sinifdən edilirsə, onda statik dəyişənin adına qədər sinfin adı yazılmalıdır.

SinifAdi.dəyişən

Nümunə:

Dəyişən Sinif Sinif xaricində dəyişənə müraciət
public static int WIDTH = 100;
Solution
Solution.WIDTH
public static String message = "Salam";
Main
Main.message
private static Scanner console;
JavaGame
Dəyişən private, sinif xaricində görünmür
private static int count = 0;
Counter
Dəyişən private, sinif xaricində görünmür
private static boolean flag;
Arithmetic
Dəyişən private, sinif xaricində görünmür


2. Statik və qeyri-statik dəyişənlərin fərqi

Qeyri-statik (adi) sinif dəyişənləri, statik sözünün istifadəsiz eyni qaydada elan edilir.

Bəs adi və statik dəyişənlər nə ilə fərqlənir?

Adi dəyişənlər sinifin obyektlərinə (sinifin nümunələrinə), statik dəyişənlər isə statik sinif obyektinə bağlıdır.

Əgər bir neçə sinif nümunəsi varsa, onların hər birində qeyri-statik (adi) dəyişənlərin öz nüsxəsi mövcuddur. Sinifin statik dəyişənləri isə həmişə statik sinif obyektində saxlanılır və yalnız bir nüsxədə mövcuddur.

Sinifin adi dəyişənlərinə (sinif sahələrinə) yalnız sinif obyektinə istinad edərək müraciət etmək olar. Və ya həmin sinifin daxilindəki metodlardan.

Nümunə:

Sinif sahəsinə sinif obyektinə istinad edərək müraciət
public class DataInfo
{
   public int value = 100;
}

public class Solution
{
   public static void main(String[] args)
   {
      DataInfo info = new DataInfo();
      System.out.println(info.value);
   }
}

Statik dəyişənlərə hər yerdən müraciət etmək olar (görünürlük modifikatorlarını nəzərə alaraq): adi metodlardan, eyni sinifin statik metodlarından, digər siniflərin metodlarından və s.

Nümunə:

Sinifin statik sahəsinə sinif obyektinə istinad etmədən müraciət
public class DataInfo
{
   public static int value = 100;
}

public class Solution
{
   public static void main(String[] args)
   {
      System.out.println(DataInfo.value);
   }
}

Yaddaş quruluşu:

Tutaq ki, bizdə 4 sahəsi olan Person sinifi var: iki statik və iki adi.

public class Person
{
   public static int count = 0;
   public static int sum = 0;
   public int age = 0;
   public String name;
}

Sinif yükləndikdən dərhal sonra

Java maşını Person sinifini yükləməyi bitirdikdə, yaddaşda belə bir mənzərə olacaq:

Statik və qeyri-statik dəyişənlərin fərqi

Birinci obyekt yaradıldıqdan sonra

Əgər Person sinifinin bir obyekti yaradılarsa, şəkil belə olacaq

Statik və qeyri-statik dəyişənlərin fərqi 1

Diqqət edin, obyektlərin hər birində iki dəyişən olsa da, bu fərqli dəyişənlərdir: adi obyektlərdə adi, statik obyektlərdə isə statik dəyişənlər.

Daha çox obyekt lazımdır

Gəlin, Person tipində daha iki obyekt yaradaq. Yeni şəkil belə olacaq:

Statik və qeyri-statik dəyişənlərin fərqi 2

Diqqət edin: hər bir obyektin özünə məxsus agename dəyişəni var.



3 static modifikatorunun silinməsi və əlavə edilməsi

Statikdən adi vəziyyətə

Bəs nə baş verəcək ki, əgər biz statik dəyişəni götürüb adi hala çevirsək: static modifikatorunu ondan silsək? Məsələn, dəyişəndən static int sum.

Dəyişdirilmiş kod belə görünəcək:

public class Person
{
   public static int count = 0;
   public int sum = 0;
   public int age = 0;
   public String name;
}

Yaddaşda isə belə bir mənzərə ilə qarşılaşacağıq:

static modifikatorunun silinməsi və əlavə edilməsi

Statik obyektin statik dəyişəni yoxa çıxdı, hər bir obyektin öz sum dəyişəni oldu.

Adidən statik vəziyyətə

Əksini də etmək olar: sinifin adi dəyişənlərinə static modifikatoru əlavə edə bilərik, bu zaman onlar bütün obyektlərdən yoxa çıxacaq və statik obyektə əlavə olunacaq. Tutaq ki, biz qərara gəldik ki, agename dəyişənlərini statik edək. Belə olan təqdirdə kod belə olacaq:

public class Person
{
   public static int count = 0;
   public int sum = 0;
   public static int age = 0;
   public static String name;
}

Yaddaşda isə artıq belə bir mənzərə olacaq:

static modifikatorunun silinməsi və əlavə edilməsi
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION