JavaRush бағдарламасында студенттер алғашқы лекциялардан бастап сөзбе-сөз кілт сөзбен танысады
Яғни,
Төменде кілт сөзі бар бағдарлама codeы берілген
this
. Ал уақыт өте келе оның нені білдіретіні белгілі болады. Бірақ көп адамдар, артына қарап, ұзақ уақыт бойы бұл негізгі сөздің дзенін түсіне алмағандарын өздеріне шын айтады. Бұл мақалада біз кілт сөздерді қолданудың құпиясын this
әлі де анықтай алмайтындар үшін жабамыз... Қош келдіңіз! Шилдттің Java анықтамалығын алсаңыз , 171-бетте this
әдіс оны шақырған нысанға сілтеме жасай алатындай кілт сөз қажет екенін оқисыз . Бұл іс жүзінде оның соңы болуы мүмкін. Бірақ бізге нақты мәліметтер қажет. Әдетте, this
ол екі жағдайда қолданылуы керек:
- Класс данасы айнымалысы мен әдіс/конструктор айнымалысы бірдей атқа ие болғанда;
- Бір типті конструкторды (мысалы, әдепкі немесе параметрленген конструктор) екіншісінен шақыру қажет болғанда. Мұны анық конструктор шақыруы деп те атайды.
Бірінші мысал - айнымалы айнымалы мен әдіс айнымалысының аты бірдей
Human
Бізде «атауы» өрісі анықталған класс бар делік : Айнымалы үшін баптау құралын жасайық name
(баптауыш өте жұмыс істейді және мұнда ешқандай айла жоқ): Біз айнымалыны әдіске (setter) жіберіп жатқанымызды ескеріңіз. ) . Біз жаңа айнымалыны енгіздік және (жалпы) оны қалағанымызды атай аламыз, себебі ол әдістің {бұйра жақшаларында} ғана көрінетін болады . Баптауышта бір жол бар екеніне назар аударыңыз: setName
String newName
setName
name = newName;
Яғни, біз жаңа айнымалыны енгіздік newName
және оны сыныпта бұрыннан бар айнымалыға тағайындадық name
. Көптеген бағдарламашылар, егер соңында біз бір нәрсе туралы айтатын болсақ, айнымалыны жаңа атаумен енгізу оғаш деп ойлады. Сыныптағы атау туралы Human
. Сондықтан тіл әзірлеушілері бір айнымалы атауды қолдануға ыңғайлы ету туралы ойлады. Басқаша айтқанда, неге бірдей мағынаны білдіретін айнымалыға екі атау керек. Яғни, мен келесідей нәрсені жасағым келеді: Бірақ бұл жағдайда мәселе туындайды . Бізде қазір бірдей аталған екі айнымалы бар. Біреуі String name
классқа Human
, екіншісі String name
оның әдісіне жатады setName
. Сондықтан Java машинасы орнатушыға жолды жазғанда қай айнымалыны білдіретінін білмейді:
name = name;
Java ең жақынын - name
әдістен алады setName
:
name
және сіз осы әдістен айнымалыға мән тағайындайсыз , оған. Бұл, әрине, мағынасы жоқ. Сондықтан айнымалыны name
класстан Human
айнымалыдан name
әдістен ажырату үшін қандай да бір жол қажет болды.Бұл мәселені шешу үшін бұл жағдайда әдіс емес, айнымалыны шақыру қажет екенін көрсететін setName
түйінді сөз енгізілді. this
сыныптың Human
:
this
мақаланың басында айтылғандай, ол шақыратын нысанға сілтеме жасайды. Нәтижесінде setName
құрылатын нысанға орнатушы арқылы адамның аты орнатылады. Төменде кілт сөзді қолданбай code берілген this
. Код класс нысанын жасайды Human
және оған атау береді:
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;
Осылайша сіз конструкторға үш параметрді айтасыз:
- екі параметрі бар конструкторды шақырыңыз.
- және жетіспейтін айнымалыны қосыңыз.
this
статикалық әдістерден басқа барлық әдістерге беріледі (сондықтан ол this
көбінесе жасырын параметр деп аталады) және әдіс деп аталатын нысанға сілтеме жасау үшін пайдаланылуы мүмкін. Бұл кілт сөзден қорқудың қажеті жоқ, өйткені This
ол қорқынышты емес.
GO TO FULL VERSION