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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(bu da ilə eynidir) |
|
|
və istənilən siniflər |
|
Nümunələr:
Kod |
---|
|
|
|
|
|
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 |
---|---|---|
|
|
|
|
|
|
|
|
Dəyişən private , sinif xaricində görünmür |
|
|
Dəyişən private , sinif xaricində görünmür |
|
|
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 |
---|
|
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 |
---|
|
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:
Birinci obyekt yaradıldıqdan sonra
Əgər Person
sinifinin bir obyekti yaradılarsa, şəkil belə olacaq
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:
Diqqət edin: hər bir obyektin özünə məxsus age
və name
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:
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, age
və name
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:

GO TO FULL VERSION