JavaRush /Java Blog /Random-TK /Açar söz {mysallarda}

Açar söz {mysallarda}

Toparda çap edildi
JavaRush-da talyplar ilkinji leksiýalardan göni manyda açar söz bilen tanyşýarlar this. Wagtyň geçmegi bilen munuň manysy belli bolýar. Emma köpler yza gaýdyp seredip, uzak wagtlap bu möhüm sözüň manysyna düşünip bilmejekdiklerini aç-açan aýdarlar. Bu makalada thishenizem düşünip bilmeýänler üçin açar sözleri ulanmak baradaky syrlaryň perdesini aýyrýarys ... Hoş geldiňiz! Schildt-iň Java salgylanma kitabyny alsaňyz , 171-nji sahypada thisusulyň atlandyrylan obýekte salgylanmagy üçin açar sözüň zerurdygyny okarsyňyz . Aslynda munuň soňy bolup biler. Emma bize aýratynlyklar gerek. Açar söz {mysallarda} - 1Düzgün bolşy ýaly, iki ýagdaýdathis ulanylmaly :
  1. Haçan-da synp mysaly üýtgeýjisi we usul / konstruktor üýtgeýjisi birmeňzeş bolsa;
  2. Haçan-da bir görnüşdäki konstruktory (mysal üçin, deslapky ýa-da parametrli konstruktor) çagyrmaly. Muňa aç-açan konstruktor jaňy hem diýilýär.
Bu, hakykatdanam däl, bu gorkunç açar sözüň ulanylýan iki mysaly. Indi bu iki ýagdaýa mysallar bilen seredeliň.

Mysal üçin - mysal üýtgeýjisi we usul üýtgeýjisiniň birmeňzeş ady bar

Human"Ady" meýdany kesgitlenýän synpymyz bar diýeliň : Üýtgeýji üçin sazlaýjy döredeliň (sazlaýjy gaty işleýär we bu ýerde hiç hili mekirlik ýok): Açar söz this mysallarda} - 2Üýtgeýjini usuly (setter) geçirýändigimize üns bermegiňizi haýyş edýäris. ) . Täze üýtgeýjini hödürledik we (umuman) islän zadymyza jaň edip bileris, sebäbi bu usulyň diňe “egri ýaýlary” içinde görüner . Sazlaýjyda bir setiriň bardygyna üns beriň: nameBu açar söz {mysallarda} - 3setNameString newNamesetName
name = newName;
.Agny, aslynda täze üýtgeýjini hödürledik newNamewe synpda eýýäm bar bolan üýtgeýjä belledik name. Köp programmist, ahyrynda şol bir zat hakda gürleşýän bolsak, täze at bilen üýtgeýjini girizmegi geň hasapladylar. Synpdaky at hakda Human. Şonuň üçin dil döredijiler bir üýtgeýän ady ulanmagy amatly etmek barada pikir etdiler. Başgaça aýdylanda, bir zady aňladýan üýtgeýjiniň näme üçin iki ady bar? Thisagny, men şuňa meňzeş bir zat etmek isleýärin: Bu açar söz {mysallarda} - 4thisöne bu ýagdaýda bir mesele ýüze çykýar . Indi birmeňzeş atlandyrylýan iki üýtgeýjimiz bar. Biri String namesynpa Human, beýlekisi String nameusulyna degişlidir setName. Şonuň üçin Java enjamy setterde setir ýazanyňyzda haýsy üýtgeýjini göz öňünde tutýandygyňyzy bilmeýär:
name = name;
Java iň ýakyn birini alýar - nameusuldan setName:
Açar söz {mysallarda} - 5
namewe bu usuldan üýtgeýjä diňe bir baha belländigiňiz ýüze çykýar . Elbetde manysy ýok. Şonuň üçin üýtgeýjini namesynpdan Humanüýtgeýjini nameusuldan tapawutlandyrmak üçin haýsydyr bir usul gerekdi setName. Bu meseläni çözmek üçin açar söz girizildi this, bu ýagdaýda üýtgeýjini usulyň däl-de, çagyrmagyň zerurdygyny görkezer; synpyň Human:
Bu açar söz {mysallarda} - 6
.Agny, thismakalanyň başynda aýdylyşy ýaly çagyryş obýektine degişlidir. Netijede, adamyň ady setNamesazlaýjynyň üsti bilen döredilen obýekte ýazylar. Aşakda açar söz ulanman kod bar this. Kod synp obýektini döredýär Humanwe oňa at berýär:
Açar söz {mysallarda} - 7
Aşakda açar söz bilen programma kody 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);
    }
}
Şeýlelik bilen, thisşol bir zady aňlatmak üçin täze üýtgeýjileri girizmekden gaça durýar, bu bolsa goşmaça üýtgeýjiler bilen kody az “ýükleýär”.

Ikinji mysal - Konstruktory aç-açan çagyrmak üçin muny ulanmak

Bir konstruktory başga birine çagyrmak, birnäçe konstruktoryňyz bar bolsa we konstruktorda ozal berlen başlangyç kody täze konstruktorda täzeden ýazmak islemeseňiz peýdaly bolup biler. Bulaşdyňyzmy? Hemme zat görünişi ýaly gorkunç däl. Aşakdaky koda serediň, onuň iki synp konstruktory bar 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 ageBu ýerde ilki bilen kabul edýän we iki parametrli konstruktor bar int weight. Onda iki setir kod ýazdyk diýeliň:
this.age = age;
this.weight = weight;
soň bolsa ýaş we agramdan başga-da beýikligi talap edýän üç parametrli başga bir konstruktor goşmak kararyna geldiler. Täze konstruktorda muny ýazyp bilersiňiz:
this.age = age;
this.weight = weight;
this.height = height;
thisThisöne bu konstruktorda eýýäm ýazan koduňyzy gaýtalamagyň ýerine, iki parametrli konstruktory aç-açan çagyrmak üçin açar söz ulanyp bilersiňiz :
this(age, weight);
// and add the missing variable:
this.height = height;
Şonuň üçin konstruktora üç parametr bilen aýdýarsyňyz:
  • iki parametri bolan bu konstruktora jaň ediň.
  • we ýiten üýtgeýjini goşuň.
Bularyň hemmesi =). Netijede, Java-daky bu açar sözüň diňe synpyň usullarynyň ýa-da konstruktorlarynyň bölegi hökmünde ulanylýandygyny belläris. Lyöne aç-açan söz, thisstatiki usullardan başga ähli usullara geçirilýär (şonuň üçin thisköplenç aç-açan parametr diýilýär) we bu usul diýilýän obýekte degişlilikde ulanylyp bilner. Bu açar sözden gorkmagyň hajaty ýok, sebäbi Thisgorkunç däl.
Açar söz this mysallarda} - 9
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION