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