CodeGym /Blog Java /Aleatoriu /Java acest cuvânt cheie
John Squirrels
Nivel
San Francisco

Java acest cuvânt cheie

Publicat în grup
Pe CodeGym, studenții sunt introduși în Java acest cuvânt cheie literalmente încă de la primele lecții. În timp, sensul său devine clar. Dar privind în urmă, mulți oameni probabil recunosc pentru ei înșiși că de mult timp nu au putut înțelege Zenul acestui cuvânt cheie. Acest articol va trage înapoi cortina care acoperă secretele cuvântului cheie this pentru oricine nu a putut încă să facă acest lucru... Aveți referința Java a lui Schildt , apoi la pagina 171 puteți vedea că acest cuvânt cheie este necesar pentru ca o metodă să facă referire la obiectul care a numit-o. Am putea încheia lecția cu asta. Dar avem nevoie de detalii. De regulă, trebuie să utilizați acest lucru în două cazuri:
  1. Când o variabilă de instanță și o variabilă metodă/constructor au același nume;
  2. Când trebuie să apelați un anumit tip de constructor (de exemplu, un constructor implicit sau un constructor parametrizat) de la un alt tip de constructor. Acest lucru se mai numește și apel explicit de constructor.
Și cam atât – există doar două cazuri în care este folosit acest cuvânt cheie înfricoșător. Acum să ne uităm la aceste două cazuri în exemple.

Exemplul 1: o variabilă de instanță și o variabilă de metodă au același nume.

Să presupunem că avem o clasă Human care definește un câmp de nume: Să creăm un setter pentru variabila nume (setter-ul este complet funcțional - nu există nicio captură aici):

class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
Rețineți că transmitem String newName metodei setName de setare Am declarat o nouă variabilă și am fi putut să o denumim așa cum dorim, deoarece va fi vizibilă numai în acoladele ({}) care includ metoda setName . Rețineți că setter-ul are o singură linie:

name = newName;
Aici am introdus o nouă variabilă numită newName și am atribuit-o variabilei de nume existente a obiectului . Mulți programatori ar putea găsi ciudat să introducă o variabilă cu un nume nou atunci când în cele din urmă vorbim despre același lucru. Adică vorbim despre câmpul de nume din clasa Uman . De aceea, creatorii Java au gândit o modalitate de a folosi convenabil același nume de variabilă. Cu alte cuvinte, de ce să avem două nume pentru o variabilă care denotă același lucru. Cu alte cuvinte, vrem să facem așa ceva:

class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
Dar aici întâlnim o problemă . Acum avem două variabile cu același nume. Un nume String aparține clasei Human , în timp ce celălalt nume String aparține metodei sale setName . Ca rezultat, JVM-ul nu ar ști la ce variabilă vă referiți atunci când scrieți următoarea linie în setter:

name = name;
Java presupune că vă referiți la cea mai apropiată variabilă de nume , adică cea din metoda setName : Cuvântul cheie this (cu exemple) - 3Deci se dovedește că pur și simplu îi atribuiți variabila nume a metodei . Ceea ce desigur nu are niciun sens. Prin urmare, limbajul avea nevoie de o modalitate de a distinge variabila nume a clasei Human de variabila nume din metoda setName . Această problemă a fost rezolvată prin introducerea cuvântului cheie this , care în acest caz indică faptul că intenționați să faceți referire la variabila asociată cu o instanță a clasei Human , nu la variabila din metodă: Cu alte cuvinte, aceastaCuvântul cheie this (cu exemple) - 4se referă la obiectul apelant, așa cum am menționat la începutul articolului. Ca rezultat, metoda setName setează numele persoanei pe obiectul creat. Mai jos este codul programului fără a utiliza acest cuvânt cheie. Codul creează un obiect uman și îi atribuie un nume: Cuvântul cheie this (cu exemple) - 5Și iată codul cu acest cuvânt cheie:

public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        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);
    }
}
Astfel, acest lucru ne permite să evităm introducerea de noi variabile care să denote același lucru, făcând codul mai curat și mai puțin aglomerat cu variabile suplimentare.

Exemplul 2: Folosind aceasta pentru un apel explicit de constructor

Apelarea unui constructor de la altul poate fi utilă atunci când aveți (destul de ciudat) mai mulți constructori și nu doriți ca noul constructor să dubleze codul de inițializare scris anterior într-un alt constructor. Confuz? Nu este atât de înfricoșător pe cât pare. Uită-te la codul de mai jos. Are doi constructori pentru clasa 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) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
Aici am furnizat mai întâi un constructor cu doi parametri: int age și int weight . Să presupunem că are două linii de cod:

this.age = age;
this.weight = weight;
Ulterior decidem să adăugăm un alt constructor cu trei parametri, adăugând înălțimea parametrilor existenți de vârstă și greutate. Ai putea scrie noul constructor astfel:

this.age = age;
this.weight = weight;
this.height = height;
Dar, în loc să repetați codul existent în acest constructor, puteți utiliza cuvântul cheie this pentru a apela explicit constructorul cu doi parametri:

this(age, weight);
// and then initialize the missing variable:
this.height = height;
Este ca și cum i-am spune constructorului cu trei parametri:
  • apelați acest alt constructor care are doi parametri
  • și apoi adăugați o altă variabilă.
Asta e tot =). În cele din urmă, observăm că în Java acest cuvânt cheie este folosit doar în metode și constructori. Dar acest lucru este transmis implicit la toate metodele non-statice (de aceea acesta este adesea numit un parametru implicit) și poate fi folosit pentru a se referi la obiectul care a numit metoda. Nu vă fie teamă de acest cuvânt cheie, pentru că nu este înfricoșător.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION