JavaRush /Java блогу /Random-KY /Бул ачкыч сөз {мисалдарда}

Бул ачкыч сөз {мисалдарда}

Группада жарыяланган
JavaRush программасында студенттер ачкыч сөз менен биринчи лекциялардан эле таанышышат this. Ал эми убакыттын өтүшү менен бул эмнени билдирери айкын болуп калат. Бирок көптөр, артка кылчайып, чынчылдык менен, балким, узак убакыт бою бул негизги сөздүн зенин түшүнө алышкан жок деп айтышат. Бул макалада биз ачкыч сөздөрдү колдонууга байланыштуу сырлардын көшөгөсүн thisдагы эле түшүнө албагандар үчүн көтөрөбүз... Кош келиңиз! Эгер сиз Шилдттин Java маалымдама китебин алсаңыз , 171-беттен thisметод аны чакырган an objectке шилтеме кылуу үчүн ачкыч сөз керек экенин окуйсуз . Бул чындыгында анын аягы болушу мүмкүн. Бирок бизге конкреттүү маалыматтар керек. Бул ачкыч сөз {мисалдарда} - 1Эреже катары, thisал эки учурда колдонулушу керек:
  1. Класс инстанциясынын өзгөрмөсү менен метод/конструктор өзгөрмө аты бирдей болгондо;
  2. Бир түрдөгү конструкторду (мисалы, демейки же параметрленген конструктор) башкасынан чакыруу керек болгондо. Бул ачык конструктор чалуу деп да аталат.
Бул, чынында эле эмес, бул коркунучтуу ачкыч сөз колдонулган эки гана учур. Эми бул эки жагдайды мисалдар менен карап көрөлү.

Биринчи мисал - инстанция өзгөрмө жана метод өзгөрмө бир аталышка ээ

Келгиле, бизде Human"аты" талаасы аныкталган класс бар дейли: Өзгөрмө үчүн орнотуучу Бул ачкыч сөз {мисалдарда} - 2түзөлү name(жөндөөчү абдан иштеп жатат жана бул жерде эч кандай айла жок): Биз өзгөрмөнү Бул ачкыч сөз {мисалдарда} - 3методго өткөрүп жатканыбызды эске алыңыз (setter) ) . Биз жаңы өзгөрмө киргиздик жана (жалпысынан) аны каалаган нерсебиз деп атай алабыз, анткени ал методдун {тармал кашааларында} гана көрүнөт . Баса, орнотуучуда бир сызык бар: setNameString newNamesetName
name = newName;
Башкача айтканда, биз жаңы өзгөрмө киргиздик newNameжана аны класста мурунтан эле бар өзгөрмөгө дайындадык name. Көптөгөн программисттер, эгер акырында биз бир эле нерсе жөнүндө сөз кылсак, жаңы ат менен өзгөрмө киргизүү кызыктай деп ойлошкон. Класстагы аты жөнүндө Human. Ошондуктан, тилди иштеп чыгуучулар бир өзгөрмө атын колдонууга ыңгайлуу кылууну ойлонушту. Башкача айтканда, эмне үчүн бир эле нерсени билдирген өзгөрмөнүн эки аты бар. Башкача айтканда, мен бул сыяктуу бир нерсе кылгым келет: Бул ачкыч сөз {мисалдарда} - 4Бирок бул учурда бир көйгөй пайда болот . Азыр бизде бирдей аталыштагы эки өзгөрмө бар. Бири String nameкласска Human, экинчиси String nameанын методуна кирет setName. Демек, Java машинасы орнотуучуга сап жазганыңызда кайсы өзгөрмөнү айтаарыңызды билбейт:
name = name;
Java эң жакынын - nameыкмадан алат setName:
Бул ачкыч сөз {мисалдарда} - 5
nameжана бул ыкмадан өзгөрмөгө жөн гана маани бересиз . Бул, албетте, эч кандай мааниси жок. Демек, өзгөрмөнү nameкласстан Humanөзгөрмөдөн nameметоддон айырмалоо үчүн кандайдыр бир жол керек болчу.Бул setNameмаселени чечүү үчүн, ачкыч сөз киргизилген this, бул учурда бул ыкманын эмес, өзгөрмөнүн чакырылышы керектигин көрсөтөт. класстын Human:
Бул ачкыч сөз {мисалдарда} - 6
Башкача айтканда, thisал макаланын башында айтылгандай, чакыруу an objectисин билдирет. Натыйжада, адамдын аты setNameтүзүлгөн an objectке орнотуучу аркылуу коюлат. Төмөндө ачкыч сөздү колдонбостон code берилген this. Код класс an objectин жаратат Humanжана ага ат берет:
Бул ачкыч сөз {мисалдарда} - 7
Ал эми төмөндө ачкыч сөз менен программа codeу болуп саналат 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);
    }
}
Ошентип, ал thisбир эле нерсени белгилөө үчүн жаңы өзгөрмөлөрдү киргизүүдөн качат, бул codeду кошумча өзгөрмөлөр менен "ашыкча жүктөөнү" азыраак кылат.

Экинчи мисал - Муну конструкторду ачык чакыруу үчүн колдонуу

Бир конструкторду башкасынан чакыруу сизде (кызык жери) бир нече конструктор болгондо жана конструктордо мурда берилген инициализация codeун жаңы конструктордо кайра жазгыңыз келбегенде пайдалуу болушу мүмкүн. Чаташып калдыңызбы? Баары көрүнгөндөй коркунучтуу эмес. Төмөнкү codeду караңыз, анын эки класс конструктору бар 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 ageБул жерде бизде адегенде жана кабыл алган эки параметрдүү конструктор бар int weight. Ага эки сап code жаздык дейли:
this.age = age;
this.weight = weight;
анан алар жашынан жана салмагынан тышкары бийиктикти да талап кылган үч параметри бар дагы бир конструкторду кошууну чечишти. Жаңы конструктордо сиз муну жазсаңыз болот:
this.age = age;
this.weight = weight;
this.height = height;
Бирок бул конструктордо мурунтан эле жазган codeду кайталоонун ордуна, ачкыч сөздү колдонуп, thisконструкторду эки параметр менен ачык чакырсаңыз болот:
this(age, weight);
// and add the missing variable:
this.height = height;
Ошентип, сиз конструкторго үч параметр менен айтып жатасыз:
  • эки параметри бар бул конструкторду чакырыңыз.
  • жана жетишпеген өзгөрмө кошуу.
Ушунун баары =). Акырында, Javaдагы this ачкыч сөзү класс инстанциясынын методдорунун же конструкторлорунун бир бөлүгү катары гана колдонулаарын белгилейбиз. Бирок кыйыр түрдө, ачкыч сөз thisстатикалык ыкмалардан башка бардык методдорго өткөрүлүп берилет (ошондуктан ал thisкөбүнчө имплициттүү параметр деп аталат) жана метод деп аталган an objectке кайрылуу үчүн колдонулушу мүмкүн. Бул ачкыч сөздөн коркуунун кереги жок, анткени Thisал коркунучтуу эмес.
Бул ачкыч сөз {мисалдарда} - 9
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION