Дар JavaRush, донишҷӯён бо калимаи калидӣ аз лексияҳои аввал шинос мешаванд
ва маълум мешавад, ки шумо танҳо ба тағирёбанда
Яъне,
Ва дар зер рамзи барнома бо калимаи калидӣ оварда шудааст
this
. Ва бо мурури замон маълум мешавад, ки ин чӣ маъно дорад. Аммо бисёриҳо, ба қафо нигоҳ карда, эҳтимол ба худ рост мегӯянд, ки муддати тӯлонӣ онҳо зени ин калимаи калидиро дарк карда натавонистанд. Дар ин мақола мо пардаи асрорро дар бораи истифодаи калимаҳои калидӣ this
барои онҳое, ки то ҳол фаҳмида наметавонанд, мебардорем... Хуш омадед! Агар шумо китоби Java-и Шилдтро гиред , дар саҳифаи 171 шумо хоҳед хонед, ки калимаи калидӣ this
лозим аст, то метод ба an objectе, ки онро даъват кардааст, истинод кунад. Ин дар асл метавонад охири он бошад. Аммо ба мо мушаххасот лозим аст. Чун қоида, this
он бояд дар ду ҳолат истифода шавад:
- Вақте ки тағирёбандаи мисоли синф ва тағирёбандаи метод/созанда як ном доранд;
- Вақте ки ба шумо лозим аст, ки конструктори як намудро (масалан, конструктори пешфарз ё параметрӣ) аз дигараш даъват кунед. Инро даъвати возеҳ конструктор низ меноманд.
Мисоли як - тағирёбандаи мисол ва тағирёбандаи метод як ном доранд
Фарз мекунем, ки мо синфе доремHuman
, ки барои он майдони "ном" муайян карда шудааст: Биёед name
барои тағирёбанда танзимкунанда эҷод кунем (танзимкунанда комилан кор мекунад ва дар ин ҷо ягон ҳилла нест): Лутфан қайд кунед, ки мо тағирёбандаро ба метод (setter) мегузаронем. ) . Мо як тағирёбандаи навро ҷорӣ кардем ва (умумӣ) метавонистем онро ҳар чизе ки мехостем, номида тавонем, зеро он танҳо дар дохor {қавсҳои ҷингила}-и метод намоён хоҳад буд . Аҳамият диҳед, ки дар танзимкунанда як сатр мавҷуд аст: 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
он ба an objectи даъваткунанда, тавре ки дар аввали мақола гуфта шуда буд, ишора хоҳад кард. Дар натиҷа, номи шахс setName
тавассути танзимкунанда ба an objectи сохташуда муқаррар карда мешавад. Дар зер code бе истифодаи калимаи калидӣ оварда шудааст this
. Рамз an objectи синфро эҷод мекунад 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и зер нигаред, он ду конструктори синф дорад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
. Фарз мекунем, ки мо дар он ду сатри рамз навиштем:
this.age = age;
this.weight = weight;
ва баъд карор доданд, ки боз як конструктори дорой се параметрро илова кунанд, ки ба гайр аз синну сол ва вазн баландй хам мегирад. Дар созандаи нав шумо метавонед инро нависед:
this.age = age;
this.weight = weight;
this.height = height;
Аммо ба ҷои такрор кардани рамзи аллакай дар ин созанда навиштаатон, шумо метавонед калимаи калидиро истифода баред, то this
конструкторро бо ду параметр ба таври возеҳ занг занед:
this(age, weight);
// and add the missing variable:
this.height = height;
Ҳамин тавр, шумо як навъ ба созанда бо се параметр мегӯед:
- ба ин созанда занг занед, ки ду параметр дорад.
- ва тағирёбандаи гумшударо илова кунед.
this
ба ҳама усулҳо интиқол дода мешавад, ба истиснои усулҳои статикӣ (бинобар ин онро this
аксар вақт параметри номуайян меноманд) ва метавонад барои истинод ба an objectе истифода шавад, ки методро номидааст. Аз ин калимаи калидӣ тарсидан лозим нест, зеро This
он даҳшатнок нест.
GO TO FULL VERSION