JavaRush /Java блогы /Random-KK /Бұл кілт сөз {мысалдарда}

Бұл кілт сөз {мысалдарда}

Топта жарияланған
JavaRush бағдарламасында студенттер алғашқы лекциялардан бастап сөзбе-сөз кілт сөзбен танысады this. Ал уақыт өте келе оның нені білдіретіні белгілі болады. Бірақ көп адамдар, артына қарап, ұзақ уақыт бойы бұл негізгі сөздің дзенін түсіне алмағандарын өздеріне шын айтады. Бұл мақалада біз кілт сөздерді қолданудың құпиясын thisәлі де анықтай алмайтындар үшін жабамыз... Қош келдіңіз! Шилдттің Java анықтамалығын алсаңыз , 171-бетте thisәдіс оны шақырған нысанға сілтеме жасай алатындай кілт сөз қажет екенін оқисыз . Бұл іс жүзінде оның соңы болуы мүмкін. Бірақ бізге нақты мәліметтер қажет. Бұл кілт сөз {мысалдарда} - 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мақаланың басында айтылғандай, ол шақыратын нысанға сілтеме жасайды. Нәтижесінде setNameқұрылатын нысанға орнатушы арқылы адамның аты орнатылады. Төменде кілт сөзді қолданбай code берілген this. Код класс нысанын жасайды 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көбінесе жасырын параметр деп аталады) және әдіс деп аталатын нысанға сілтеме жасау үшін пайдаланылуы мүмкін. Бұл кілт сөзден қорқудың қажеті жоқ, өйткені Thisол қорқынышты емес.
Бұл кілт сөз {мысалдарда} - 9
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION