JavaRush /Java Blogu /Random-AZ /Açar söz bu {nümunələrdə}

Açar söz bu {nümunələrdə}

Qrupda dərc edilmişdir
JavaRush-da tələbələr açar sözlə ilk mühazirələrdən hərfi şəkildə tanış olurlar 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. thisBu 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 thistə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. Açar söz this {nümunələrdə} - 1Bir qayda olaraq, iki haldathis istifadə edilməlidir :
  1. Bir sinif nümunəsi dəyişəni və metod/konstruktor dəyişəni eyni ada malik olduqda;
  2. 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.
Bu, çox deyil, bu qorxulu açar sözün istifadə edildiyi yalnız iki haldır. İndi bu iki vəziyyətə nümunələrlə baxaq.

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 Açar söz this {nümunələrdə} - 2yaradaq 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 Açar söz this {nümunələrdə} - 3metoda (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 newNamevə 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: Açar söz this {nümunələrdə} - 4Amma bu halda problem yaranır . İndi eyni adlı iki dəyişənimiz var. Biri String namesinfə Human, digəri isə String nameonun 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 - namemetoddan setName:
Açar söz this {nümunələrdə} - 5
namevə 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 namesinifdən Humandəyişəni namemetoddan ayırmaq üçün hansısa üsula ehtiyac var idi.Bu setNameproblemi həll etmək üçün açar söz təqdim edildi thiski, 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:
Açar söz this {nümunələrdə} - 6
Yəni thisməqalənin əvvəlində deyildiyi kimi, çağıran obyektə istinad edəcək. setNameNə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 Humanvə ona ad verir:
Açar söz this {nümunələrdə} - 7
Və aşağıda açar sözü olan proqram kodudur 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, thiseyni ş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 var Human:
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 ageBurada ə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ə, thiskonstruktoru 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.
Hamısı budur =). Nəhayət, qeyd edirik ki, Java-da this açar sözü yalnız metodların və ya sinif nümunəsinin konstruktorlarının bir hissəsi kimi istifadə olunur. Lakin dolayısı ilə açar söz thisstatik 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 Thisqorxulu deyil.
Açar söz this {nümunələrdə} - 9
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION