JavaRush-da tələbələr açar sözlə ilk mühazirələrdən hərfi şəkildə tanış olurlar
Yəni
Və aşağıda açar sözü olan proqram kodudur
this
. Və zaman keçdikcə bunun nə demək olduğu aydın olur. Ancaq bir çoxları, geriyə baxaraq, yəqin ki, vicdanla özlərinə uzun müddət bu açar sözün zenini dərk edə bilmədiklərini söyləyəcəklər. this
Bu yazıda biz hələ də başa düşə bilməyənlər üçün açar sözlərdən istifadə ilə bağlı sirr pərdəsini qaldırırıq ... Xoş gəlmisiniz! Əgər siz Schildtin Java arayış kitabını götürsəniz , səhifə 171-də oxuyacaqsınız ki, açar söz this
tələb olunur ki, metod onu çağıran obyektə istinad edə bilsin. Bu, əslində bunun sonu ola bilər. Amma bizə konkretlik lazımdır. Bir qayda olaraq, iki haldathis
istifadə edilməlidir :
- Bir sinif nümunəsi dəyişəni və metod/konstruktor dəyişəni eyni ada malik olduqda;
- Bir növ konstruktoru (məsələn, standart və ya parametrli konstruktor) digərindən çağırmaq lazım olduqda. Buna açıq konstruktor çağırışı da deyilir.
Birinci nümunə - nümunə dəyişəni və metod dəyişəni eyni ada malikdir
Tutaq ki, bizdəHuman
"ad" sahəsi müəyyən edilmiş bir sinif var: Dəyişən üçün təyinedici yaradaq name
(tənzimləyici kifayət qədər işləyir və burada heç bir hiylə yoxdur): Nəzərə alın ki, dəyişəni metoda (setter) setName
ötürürük. ) String newName
. Biz yeni bir dəyişən təqdim etdik və (ümumiyyətlə) onu istədiyimiz kimi adlandıra bilərik, çünki o, yalnız metodun {qıvrımlı mötərizələr} içərisində görünəcəkdi setName
. Ayarlayıcıda bir xətt olduğuna diqqət yetirin:
name = newName;
Yəni, əslində biz yeni bir dəyişən təqdim etdik newName
və onu artıq sinifdə mövcud olan dəyişənə təyin etdik name
. Bir çox proqramçı, əgər sonda eyni şeydən danışırıqsa, yeni adla dəyişən təqdim etməyi qəribə hesab edirdi. Sinifdəki ad haqqında Human
. Buna görə də, dil tərtibatçıları bir dəyişən addan istifadə etməyi rahat etmək barədə düşündülər. Başqa sözlə desək, eyni məna daşıyan dəyişənin niyə iki adı var? Yəni mən belə bir şey etmək istərdim: Amma bu halda problem yaranır . İndi eyni adlı iki dəyişənimiz var. Biri String name
sinfə Human
, digəri isə String name
onun metoduna aiddir setName
. Buna görə də, Java maşını təyinedicidə sətir yazarkən hansı dəyişəni nəzərdə tutduğunuzu bilmir:
name = name;
Java ən yaxın olanı götürür - name
metoddan setName
:
name
və belə çıxır ki, siz sadəcə olaraq bu metoddan dəyişənə, ona dəyər təyin edirsiniz . Hansı ki, bunun heç bir mənası yoxdur. Buna görə də dəyişəni name
sinifdən Human
dəyişəni name
metoddan ayırmaq üçün hansısa üsula ehtiyac var idi.Bu setName
problemi həll etmək üçün açar söz təqdim edildi this
ki, bu halda bu dəyişəni metoddan deyil, dəyişəni çağırmaq lazım olduğunu göstərəcək. bir sinifdən Human
:
this
məqalənin əvvəlində deyildiyi kimi, çağıran obyektə istinad edəcək. setName
Nəticədə, yaradılan obyektə təyinedici vasitəsilə şəxsin adı təyin olunacaq. Aşağıda açar sözdən istifadə etmədən kod verilmişdir this
. Kod sinif obyekti yaradır Human
və ona ad verir:
this
:
public class Solution{
public static void main(String[] args) {
Human human1 = new Human();
human1.setName("Volodya");
human1.print();
}
}
class Human{
String name;
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
void print(){
System.out.println(name);
}
}
Beləliklə, o, this
eyni şeyi ifadə etmək üçün yeni dəyişənlərin tətbiqindən yayınır, bu da kodu əlavə dəyişənlərlə daha az “artıq yüklənmiş” edir.
İkinci Nümunə - Konstruktoru açıq şəkildə çağırmaq üçün bundan istifadə edin
Bir konstruktoru digərindən çağırmaq (qəribə də olsa) bir neçə konstruktorunuz olduqda faydalı ola bilər və siz konstruktorda əvvəllər verilmiş başlanğıc kodunu yeni konstruktorda yenidən yazmaq istəmirsiniz. Qarışıq? Hər şey göründüyü qədər qorxulu deyil. Aşağıdakı koda baxın, onun iki sinif konstruktoru varHuman
:
class Human{
int age;
int weight;
int height;
Human(int age, int weight){
this.age = age;
this.weight = weight;
}
Human(int age, int weight, int height){
//you call the constructor with two parameters
this(age, weight);
//and add the missing variable
this.height = height;
}
}
int age
Burada əvvəlcə və qəbul edən iki parametrli konstruktorumuz var int weight
. Tutaq ki, biz ona iki sətir kod yazdıq:
this.age = age;
this.weight = weight;
və sonra yaş və çəki ilə yanaşı, boyu da götürən üç parametrli başqa bir konstruktor əlavə etmək qərarına gəldilər. Yeni konstruktorda bunu yaza bilərsiniz:
this.age = age;
this.weight = weight;
this.height = height;
Lakin bu konstruktorda artıq yazdığınız kodu təkrarlamaq əvəzinə, this
konstruktoru iki parametrlə açıq şəkildə çağırmaq üçün açar sözdən istifadə edə bilərsiniz:
this(age, weight);
// and add the missing variable:
this.height = height;
Beləliklə, siz konstruktora üç parametrlə deyirsiniz:
- iki parametri olan bu konstruktoru çağırın.
- və çatışmayan dəyişəni əlavə edin.
this
statik olanlardan başqa bütün metodlara ötürülür (buna görə də onu this
çox vaxt gizli parametr adlandırırlar) və metodu çağıran obyektə istinad etmək üçün istifadə edilə bilər. Bu açar sözdən qorxmağa ehtiyac yoxdur, çünki This
qorxulu deyil.
GO TO FULL VERSION