1. Konstantalar
Bir çox proqramlaşdırma dillərində konstantalar mövcuddur — dəyərləri dəyişdirilə bilməyən dəyişənlər. Adətən bunlar Pi
kimi fundamental şeylər və ya aylardakı günlərin sayı kimi şeylərdir. Lakin prinsipcə proqramçı, lazım olduğunu düşünərsə, hər hansı dəyişəni konstanta edə bilər.
Beləliklə, Java-da dəyişməz dəyişən (konstanta) necə elan edilir? Bunun üçün xüsusi bir final
açar sözü mövcuddur. Dəyişməz bir dəyişənin yaradılması adi dəyişənin yaradılması kimi görünür, sadəcə dəyişənin tipindən əvvəl final
sözünü yazmalısınız:
final tip ad = dəyər;
Əgər siz final
-dəyişənə başqa bir dəyər təyin etməyə çalışsanız, proqramınız sadəcə kompilyasiya olmayacaq.
final
-dəyişən mütləq elan edilərkən təyin edilməlidir (ona bir dəyər verilən). Bu qaydanın bir istisnası var: dəyişən sinifinin inisializasiyasını konstruktora köçürə bilərsiniz. Amma bu barədə 10-cu səviyyədə öyrənəcəksiniz.
Açar sözləri azaldaraq, Java inkişaf etdiriciləri final
sözünü yalnız konstantalar üçün deyil, həmçinin metodlar və hətta siniflərin elanında istifadə edir. final
kimi elanedilmiş metodlar yenidən yazıla (override) bilməzlər, final
kimi elan edilmiş siniflər isə irsi ola bilməz.
final
modifikatorunu hər bir dəyişkənə əlavə edə bilərsiniz: lokal, parametrlərə, sinif sahələrinə və statik dəyişənlərə.
Diqqət yetirin ki, final
yalnız dəyişənin dəyişdirilməsindən qorunmadır. Əgər dəyişən obyektə istinad saxlayırsa, obyekti dəyişmək yenə də mümkündür.
Nümunə:
|
Array yaradırıq. Belə olmaz: data dəyişəni final olaraq elan edilib.Belə olar. Və belə də olar. |
Qlobal konstantalar
Əgər proqramınızda qlobal konstantalar elan etmək istəyirsinizsə, bunun üçün sinifin statik dəyişənlərini yaratmalı, həmçinin onları public
və final
etməlisiniz. Belə dəyişənlərin adlarında xüsusi bir yazı üslubu istifadə olunur: böyük hərflə yazılırlar və sözlərarası ayırıcı olaraq alt xətt (_) simvolu istifadə edilir.
Nümunələr:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. Dəyişənlərin kölgələnməsi
Əvvəl də dediyimiz kimi, eyni metodda bir neçə lokal dəyişəni eyni adla yaratmaq olmaz. Fərqli metodlarda isə — olar.
Amma bəs bunu bilirdinizmi: sinif dəyişənləri ilə metodun lokal dəyişənləri eyni ada malik ola bilər.
Nümunə:
Kod | Dəyişənlərin əlçatanlığı |
---|---|
|
|
add
metodunda lokal dəyişən sum
elan etdik, və bu metodu tamamlayanadək sinif dəyişənini sum
kölgələdi (və ya buna kölgələmə deyilir).
Yaxşı, deyərsiz, bir az gözlənilən davranışdır. Amma bu hamısı deyil. Məlum oldu ki, əgər sinif dəyişənini lokal dəyişən kölgələyirsə, metodda sinif dəyişəninə müraciət etmək üçün bir yol var. Bunu etmək üçün adının qarşısına this
açar sözünü yazmaq lazımdır:
this.ad
Ad münaqişəsinin uğurla həll edildiyi nümunə:
Kod | Dəyişənlərin əlçatanlığı |
---|---|
|
|
Hər yerdə count
və sum
dəyişənlərinə həm this
açar sözü ilə, həm də onsuz müraciət etmək olar. Lokal dəyişən sum
, sinif dəyişənini sum
kölgələdiyi sətrlərdə, sinif dəyişəninə yalnız this
istifadə edərək müraciət etmək mümkündür.
Əgər sadəcə sinif dəyişəni deyil, sinifin statik dəyişəni kölgələnirsə, ona this
ilə deyil, sinifin adı ilə müraciət edilməlidir:
ClassName.ad
Nümunə:
Kod | Dəyişənlərin əlçatanlığı |
---|---|
|
|
Hər yerdə count
və sum
statik dəyişənlərinə həm Solution
sinfinin adı ilə, həm də onsuz girişi təmin etmək olar. Lokal dəyişən sum
sinif dəyişənini sum
kölgələdiyi sətrlərdə, sinif dəyişəninə yalnız Solution
prefiksindən istifadə etməklə müraciət etmək mümkündür.
3. Dəyişənlər for
dövründə
Və başqa bir kiçik, amma maraqlı fakt.
Başqa bir yer var ki, burada dəyişən xüsusi şəkildə elan edilir — bu for
dövrü-dür.
Xatırlayırsınızsa, adətən for
dövründə dairəvi mötərizələrin içində sayğacı dəyişən elan olunur. Bəs bu dəyişənin görünüş sahəsi necə olacaq? Axı o dövrün bədənində deyil — demək, bütün metodda mı? Yoxsa yenə də yox?
Düzgün cavab belədir: for
dövrü-nün başlığında elan olunan dəyişən yalnız dövrün bədənində və for
dövrü başlığında görünür.
Nümunə:
Kod | Dəyişənlərin mövcudluğu |
---|---|
|
|
Buna görə də, siz kodunuzda eyni ada malik sayğac dəyişəni ilə ardıcıl olaraq bir neçə dövr yaza bilərsiniz — heç bir problem olmayacaq.
Nümunə:
Kod | Dəyişənlərin mövcudluğu |
---|---|
|
|
GO TO FULL VERSION