JavaRush /Блоги Java /Random-TG /Калимаи калидӣ ин {дар мисолҳо}

Калимаи калидӣ ин {дар мисолҳо}

Дар гурӯҳ нашр шудааст
Дар JavaRush, донишҷӯён бо калимаи калидӣ аз лексияҳои аввал шинос мешаванд this. Ва бо мурури замон маълум мешавад, ки ин чӣ маъно дорад. Аммо бисёриҳо, ба қафо нигоҳ карда, эҳтимол ба худ рост мегӯянд, ки муддати тӯлонӣ онҳо зени ин калимаи калидиро дарк карда натавонистанд. Дар ин мақола мо пардаи асрорро дар бораи истифодаи калимаҳои калидӣ thisбарои онҳое, ки то ҳол фаҳмида наметавонанд, мебардорем... Хуш омадед! Агар шумо китоби Java-и Шилдтро гиред , дар саҳифаи 171 шумо хоҳед хонед, ки калимаи калидӣ thisлозим аст, то метод ба an objectе, ки онро даъват кардааст, истинод кунад. Ин дар асл метавонад охири он бошад. Аммо ба мо мушаххасот лозим аст. Калимаи калидӣ ин {дар мисолҳо} - 1Чун қоида, thisон бояд дар ду ҳолат истифода шавад:
  1. Вақте ки тағирёбандаи мисоли синф ва тағирёбандаи метод/созанда як ном доранд;
  2. Вақте ки ба шумо лозим аст, ки конструктори як намудро (масалан, конструктори пешфарз ё параметрӣ) аз дигараш даъват кунед. Инро даъвати возеҳ конструктор низ меноманд.
Ин аст, на он қадар зиёд, танҳо ду ҳолате, ки ин калимаи даҳшатнок истифода мешавад. Акнун биёед ин ду ҳолатро бо мисолҳо дида бароем.

Мисоли як - тағирёбандаи мисол ва тағирёбандаи метод як ном доранд

Фарз мекунем, ки мо синфе дорем Human, ки барои он майдони "ном" муайян карда шудааст: Калимаи калидӣ ин {дар мисолҳо} - 2Биёед nameбарои тағирёбанда танзимкунанда эҷод кунем (танзимкунанда комилан кор мекунад ва дар ин ҷо ягон ҳилла нест): Лутфан қайд кунед, ки мо тағирёбандаро Калимаи калидӣ ин {дар мисолҳо} - 3ба метод (setter) мегузаронем. ) . Мо як тағирёбандаи навро ҷорӣ кардем ва (умумӣ) метавонистем онро ҳар чизе ки мехостем, номида тавонем, зеро он танҳо дар дохor {қавсҳои ҷингила}-и метод намоён хоҳад буд . Аҳамият диҳед, ки дар танзимкунанда як сатр мавҷуд аст: 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
Ва дар зер рамзи барнома бо калимаи калидӣ оварда шудааст 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;
Ҳамин тавр, шумо як навъ ба созанда бо се параметр мегӯед:
  • ба ин созанда занг занед, ки ду параметр дорад.
  • ва тағирёбандаи гумшударо илова кунед.
Ин ҳама =). Дар охир, мо қайд мекунем, ки ин калимаи калидӣ дар Java танҳо ҳамчун як қисми усулҳо ё созандагони мисоли синф истифода мешавад. Аммо ба таври ғайримустақим, калимаи калидӣ thisба ҳама усулҳо интиқол дода мешавад, ба истиснои усулҳои статикӣ (бинобар ин онро thisаксар вақт параметри номуайян меноманд) ва метавонад барои истинод ба an objectе истифода шавад, ки методро номидааст. Аз ин калимаи калидӣ тарсидан лозим нест, зеро Thisон даҳшатнок нест.
Калимаи калидӣ ин {дар мисолҳо} - 9
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION