JavaRush /Blog Java /Random-PL /Słowo kluczowe to {w przykładach}

Słowo kluczowe to {w przykładach}

Opublikowano w grupie Random-PL
W JavaRush studenci zapoznają się ze słowem kluczowym dosłownie od pierwszych wykładów this. Z czasem staje się jasne, co to oznacza. Ale wielu, patrząc wstecz, prawdopodobnie szczerze powie sobie, że przez długi czas nie mogli zrozumieć zen tego kluczowego słowa. W tym artykule uchylamy zasłonę tajemnic używania słów kluczowych thistym, którzy wciąż nie mogą tego rozgryźć... Witamy! Jeśli sięgniesz do podręcznika Java Schildta , na stronie 171 przeczytasz, że thiswymagane jest słowo kluczowe, aby metoda mogła odwoływać się do obiektu, który ją wywołał. To właściwie może być koniec. Ale potrzebujemy konkretów. Słowo kluczowe to {w przykładach} - 1Z reguły thisnależy go stosować w dwóch przypadkach:
  1. Gdy zmienna instancji klasy i zmienna metody/konstruktora mają tę samą nazwę;
  2. Kiedy trzeba wywołać konstruktor jednego typu (na przykład konstruktor domyślny lub sparametryzowany) z innego. Nazywa się to również jawnym wywołaniem konstruktora.
To wszystko, naprawdę niewiele, tylko dwa przypadki użycia tego przerażającego słowa kluczowego. Przyjrzyjmy się teraz tym dwóm sytuacjom na przykładach.

Przykład pierwszy - zmienna instancji i zmienna metody mają tę samą nazwę

Załóżmy, że mamy klasę Human, dla której zdefiniowano pole „nazwa”: Słowo kluczowe to {w przykładach} - 2Stwórzmy nameseter dla zmiennej (setter działa całkiem nieźle i nie ma tu żadnego triku): Pamiętaj, że przekazujemy zmienną Słowo kluczowe to {w przykładach} - 3do metody (setter ) . Wprowadziliśmy nową zmienną i (ogólnie) mogliśmy ją nazwać jak chcieliśmy, ponieważ byłaby ona widoczna tylko w {nawiasach klamrowych} metody . Zauważ, że w seterze znajduje się jedna linia: setNameString newNamesetName
name = newName;
Oznacza to, że tak naprawdę wprowadziliśmy nową zmienną newNamei przypisaliśmy ją do zmiennej już istniejącej w klasie name. Wielu programistów uważało za dziwne wprowadzanie zmiennej o nowej nazwie, jeśli w końcu mówimy o tym samym. O nazwie w klasie Human. Dlatego twórcy języka pomyśleli o ułatwieniu używania jednej nazwy zmiennej. Innymi słowy, po co mieć dwie nazwy zmiennej, która oznacza to samo. To znaczy chciałbym zrobić coś takiego: Słowo kluczowe to {w przykładach} - 4Ale w tym przypadku pojawia się problem . Mamy teraz dwie zmienne o tej samej nazwie. Jeden String namenależy do klasy Human, a drugi String namedo jej metody setName. Dlatego maszyna Java nie wie, którą zmienną masz na myśli, pisząc ciąg znaków w seterze:
name = name;
Java bierze najbliższą - namez metody setName:
Słowo kluczowe to {w przykładach} - 5
i okazuje się, że po prostu przypisujesz wartość zmiennej namez tej metody, do niej. Co oczywiście nie ma żadnego sensu. Dlatego potrzebny był jakiś sposób na odróżnienie zmiennej nameod klasy Humanod zmiennej nameod metody.Aby setNamerozwiązać ten problem, wprowadzono słowo kluczowe this, które w tym przypadku będzie wskazywało, że należy wywołać zmienną nie metody, ale z klasy Human:
Słowo kluczowe to {w przykładach} - 6
Oznacza to, thisże będzie odnosił się do obiektu wywołującego, jak powiedziano na początku artykułu. W rezultacie imię osoby setNamezostanie ustawione przez setera na utworzony obiekt. Poniżej znajduje się kod bez użycia słowa kluczowego this. Kod tworzy obiekt klasy Humani nadaje mu nazwę:
Słowo kluczowe to {w przykładach} - 7
A poniżej kod programu ze słowem kluczowym 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);
    }
}
W ten sposób thisunika się wprowadzania nowych zmiennych oznaczających to samo, co sprawia, że ​​kod jest mniej „przeciążony” dodatkowymi zmiennymi.

Przykład drugi — użycie tego do jawnego wywołania konstruktora

Wywoływanie jednego konstruktora z drugiego może być przydatne, gdy (co dziwne) masz kilka konstruktorów i nie chcesz przepisywać kodu inicjującego podanego wcześniej w konstruktorze w nowym konstruktorze. Zdezorientowany? Wszystko nie jest tak straszne, jak się wydaje. Spójrz na poniższy kod, ma on dwa konstruktory klas 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){
        //wywołujesz konstruktora z dwoma parametrami
        this(age, weight);
        //i dodaj brakującą zmienną
        this.height = height;
    }
}
Tutaj najpierw mamy konstruktor dwuparametrowy, który akceptuje int agei int weight. Powiedzmy, że napisaliśmy w nim dwie linijki kodu:
this.age = age;
this.weight = weight;
a następnie postanowiono dodać kolejnego konstruktora z trzema parametrami, który oprócz wieku i wagi przyjmuje także wzrost. W nowym konstruktorze możesz napisać to:
this.age = age;
this.weight = weight;
this.height = height;
Zamiast jednak powtarzać kod, który już napisałeś w tym konstruktorze, możesz użyć słowa kluczowego, aby thisjawnie wywołać konstruktor z dwoma parametrami:
this(age, weight);
// i dodaj brakującą zmienną:
this.height = height;
Mówisz więc konstruktorowi za pomocą trzech parametrów:
  • wywołaj tego konstruktora, który ma dwa parametry.
  • i dodaj brakującą zmienną.
To wszystko =). Na koniec zauważamy, że słowo kluczowe this w Javie jest używane tylko jako część metod lub konstruktorów instancji klasy. Jednak w sposób dorozumiany słowo kluczowe thisjest przekazywane do wszystkich metod z wyjątkiem metod statycznych (stąd thisczęsto nazywane jest parametrem ukrytym) i może być użyte do odniesienia się do obiektu, który wywołał metodę. Tego słowa kluczowego nie trzeba się bać, bo Thisono nie jest straszne.
Słowo kluczowe to {w przykładach} - 9
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION