JavaRush /Java blogi /Random-UZ /Bu kalit so'z {misollarda}

Bu kalit so'z {misollarda}

Guruhda nashr etilgan
JavaRush-da talabalar birinchi ma'ruzalardan boshlab kalit so'z bilan tanishadilar this. Va vaqt o'tishi bilan bu nimani anglatishini aniqlaydi. Ammo ko'pchilik, orqaga qarab, uzoq vaqt davomida ushbu kalit so'zning zenini anglay olmaganliklarini o'zlariga halol aytishadi. thisUshbu maqolada biz hali ham buni tushuna olmaganlar uchun kalit so'zlardan foydalanish sirlari pardasini ko'taramiz ... Xush kelibsiz! Agar siz Shildtning Java ma'lumotnomasini olsangiz , 171-betda siz kalit so'z thiszarurligini o'qiysiz, shunda usul uni chaqirgan ob'ektga murojaat qilishi mumkin. Bu aslida uning oxiri bo'lishi mumkin. Ammo bizga aniq ma'lumotlar kerak. Bu kalit so'z {misollarda} - 1Qoida tariqasida, u ikki holatdathis qo'llanilishi kerak :
  1. Sinf namunasi o'zgaruvchisi va metod/konstruktor o'zgaruvchisi bir xil nomga ega bo'lsa;
  2. Bir turdagi konstruktorni (masalan, standart yoki parametrlangan konstruktor) boshqasidan chaqirish kerak bo'lganda. Bu aniq konstruktor chaqiruvi deb ham ataladi.
Bu juda ko'p emas, bu qo'rqinchli kalit so'z ishlatilgan ikkita misol. Endi bu ikki holatni misollar bilan ko'rib chiqamiz.

Birinchi misol - misol o'zgaruvchisi va usul o'zgaruvchisi bir xil nomga ega

Aytaylik, bizda Human"nom" maydoni aniqlangan sinf mavjud: O'zgaruvchi uchun setter Bu kalit so'z {misollarda} - 2yarataylik name(sozlovchi yaxshi ishlaydi va bu erda hech qanday hiyla yo'q): Iltimos, biz o'zgaruvchini Bu kalit so'z {misollarda} - 3metodga (setter) o'tkazayotganimizni unutmang. ) . Biz yangi o'zgaruvchini kiritdik va (umuman) uni xohlagan narsamiz deb atashimiz mumkin edi, chunki u faqat usulning {jingalak qavslari} ichida ko'rinadi . E'tibor bering, sozlagichda bitta qator mavjud: setNameString newNamesetName
name = newName;
Ya'ni, aslida biz yangi o'zgaruvchini kiritdik newNameva uni sinfda mavjud bo'lgan o'zgaruvchiga tayinladik name. Ko'pgina dasturchilar, agar oxirida biz xuddi shu narsa haqida gapiradigan bo'lsak, o'zgaruvchini yangi nom bilan kiritish g'alati tuyuldi. Sinfdagi ism haqida Human. Shu sababli, til ishlab chiquvchilari bitta o'zgaruvchining nomidan foydalanishni qulay qilish haqida o'ylashdi. Boshqacha qilib aytganda, nima uchun bir xil ma'noni anglatuvchi o'zgaruvchining ikkita nomi bor? Ya'ni, men shunday qilmoqchiman: Bu kalit so'z {misollarda} - 4Lekin bu holda muammo paydo bo'ladi . Endi bizda bir xil nomlangan ikkita o'zgaruvchi bor. Biri String namesinfga Human, ikkinchisi esa String nameuning uslubiga tegishli setName. Shuning uchun, Java mashinasi setterda satr yozganingizda qaysi o'zgaruvchini nazarda tutayotganingizni bilmaydi:
name = name;
Java eng yaqinini - nameusuldan oladi setName:
Bu kalit so'z {misollarda} - 5
va ma'lum bo'lishicha, siz ushbu usuldan o'zgaruvchiga shunchaki qiymat berasiz name, unga. Bu, albatta, hech qanday ma'noga ega emas. Shuning uchun, o'zgaruvchini namesinfdan Humano'zgaruvchidan namemetoddan ajratish uchun qandaydir yo'l kerak edi.Bu setNamemuammoni hal qilish uchun kalit so'z kiritildi this, bu holda bu o'zgaruvchini usul emas, balki o'zgaruvchini chaqirish kerakligini ko'rsatadi. sinfdan Human:
Bu kalit so'z {misollarda} - 6
Ya'ni, thismaqolaning boshida aytib o'tilganidek, u chaqiruvchi ob'ektga murojaat qiladi. Natijada, yaratilgan ob'ektga sozlagich orqali shaxsning nomi setNameo'rnatiladi. Quyida kalit so'zni ishlatmasdan kod mavjud this. Kod sinf ob'ektini yaratadi Humanva unga nom beradi:
Bu kalit so'z {misollarda} - 7
Va quyida kalit so'z bilan dastur kodi 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);
    }
}
Shunday qilib, u thisbir xil narsani belgilash uchun yangi o'zgaruvchilarni kiritishdan qochadi, bu esa kodni qo'shimcha o'zgaruvchilar bilan kamroq "ortiqcha yuklangan" qiladi.

Ikkinchi misol - bu konstruktorni aniq chaqirish uchun foydalanish

Bir konstruktorni boshqasidan chaqirish, agar sizda (g'alati) bir nechta konstruktorlar mavjud bo'lsa va siz konstruktorda ilgari berilgan ishga tushirish kodini yangi konstruktorda qayta yozishni xohlamasangiz foydali bo'lishi mumkin. Adashib qoldingizmi? Hamma narsa ko'rinadigan darajada qo'rqinchli emas. Quyidagi kodga qarang, u ikkita sinf konstruktoriga ega 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 ageBu erda bizda birinchi navbatda va qabul qiluvchi ikki parametrli konstruktor mavjud int weight. Aytaylik, biz unda ikkita qator kod yozdik:
this.age = age;
this.weight = weight;
va keyin ular yana bir konstruktorni qo'shishga qaror qilishdi, uchta parametrga ega, bu yosh va vazndan tashqari, balandlikni ham oladi. Yangi konstruktorda buni yozishingiz mumkin:
this.age = age;
this.weight = weight;
this.height = height;
Biroq, ushbu konstruktorda allaqachon yozgan kodni takrorlash o'rniga, thisikkita parametr bilan konstruktorni aniq chaqirish uchun kalit so'zdan foydalanishingiz mumkin:
this(age, weight);
// and add the missing variable:
this.height = height;
Shunday qilib, siz konstruktorga uchta parametrni aytasiz:
  • ikkita parametrga ega bo'lgan ushbu konstruktorni chaqiring.
  • va etishmayotgan o'zgaruvchini qo'shing.
Hammasi shu =). Va nihoyat, shuni ta'kidlaymizki, Java'dagi this kalit so'zi faqat sinf misolining usullari yoki konstruktorlarining bir qismi sifatida ishlatiladi. Lekin bilvosita, kalit so'z thisstatiklardan tashqari barcha usullarga uzatiladi (shuning uchun u thisko'pincha yashirin parametr deb ataladi) va usul deb ataladigan ob'ektga murojaat qilish uchun ishlatilishi mumkin. Bu kalit so'zdan qo'rqishning hojati yo'q, chunki Thisu qo'rqinchli emas.
Bu kalit so'z {misollarda} - 9
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION