JavaRush /Java-Blog /Random-DE /Verschlagworten Sie dies {in Beispielen}

Verschlagworten Sie dies {in Beispielen}

Veröffentlicht in der Gruppe Random-DE
Bei JavaRush werden Studierende bereits in den ersten Vorlesungen wortwörtlich an das Schlüsselwort herangeführt this. Und mit der Zeit wird klar, was es bedeutet. Aber viele werden sich im Nachhinein wahrscheinlich ehrlich sagen, dass sie den Zen dieses Schlüsselworts lange Zeit nicht erkennen konnten. In diesem Artikel lüften wir den Schleier der Geheimnisse über die Verwendung von Schlüsselwörtern thisfür diejenigen, die es immer noch nicht verstehen ... Willkommen! Wenn Sie Schildts Java- Referenzbuch zur Hand nehmen , lesen Sie auf Seite 171, dass ein Schlüsselwort thiserforderlich ist, damit eine Methode auf das Objekt verweisen kann, das sie aufgerufen hat. Das könnte tatsächlich das Ende sein. Aber wir brauchen Einzelheiten. Geben Sie diesem {in Beispielen} ein Schlüsselwort – 1In der Regel thissollte es in zwei Fällen eingesetzt werden:
  1. Wenn eine Klasseninstanzvariable und eine Methoden-/Konstruktorvariable denselben Namen haben;
  2. Wenn Sie einen Konstruktor eines Typs (z. B. einen Standardkonstruktor oder einen parametrisierten Konstruktor) von einem anderen aufrufen müssen. Dies wird auch als expliziter Konstruktoraufruf bezeichnet.
Das ist es, eigentlich nicht viel, nur zwei Fälle, in denen dieses gefürchtete Schlüsselwort verwendet wird. Schauen wir uns nun diese beiden Situationen anhand von Beispielen an.

Beispiel eins – Instanzvariable und Methodenvariable haben denselben Namen

Nehmen wir an, wir haben eine Klasse Human, für die das Feld „Name“ definiert ist: Erstellen Verschlagworten Sie dies {in Beispielen} – 2wir nameeinen Setter für die Variable (der Setter funktioniert recht gut und es gibt hier keinen Trick): Bitte beachten Sie, dass wir die Variable Verschlagworten Sie dies {in Beispielen} – 3an die Methode (Setter) setNameübergeben ) String newName. Wir haben eine neue Variable eingeführt und konnten sie (im Allgemeinen) so nennen, wie wir wollten, da sie nur innerhalb der {geschweiften Klammern} der Methode sichtbar wäre setName. Beachten Sie, dass es im Setter eine Zeile gibt:
name = newName;
Das heißt, wir haben tatsächlich eine neue Variable eingeführt newNameund sie einer bereits in der Klasse vorhandenen Variablen zugewiesen name. Viele Programmierer fanden es seltsam, eine Variable mit einem neuen Namen einzuführen, wenn es am Ende um dasselbe geht. Über den Namen in der Klasse Human. Daher haben die Sprachentwickler darüber nachgedacht, die Verwendung eines Variablennamens bequemer zu gestalten. Mit anderen Worten, warum gibt es zwei Namen für eine Variable, die dasselbe bedeuten? Das heißt, ich würde gerne so etwas machen: Verschlagworten Sie dies {in Beispielen} – 4Aber in diesem Fall entsteht ein Problem . Wir haben jetzt zwei Variablen, die den gleichen Namen haben. Einer String namegehört zur Klasse Humanund der andere String namezu ihrer Methode setName. Daher weiß die Java-Maschine nicht, welche Variable Sie meinen, wenn Sie einen String in einen Setter schreiben:
name = name;
Java nimmt das nächstgelegene - nameaus der Methode setName:
Verschlüsseln Sie dies mit {in Beispielen} – 5
und es stellt sich heraus, dass Sie einer Variablen namemit dieser Methode einfach einen Wert zuweisen. Was natürlich keinen Sinn ergibt. Daher war eine Möglichkeit erforderlich, eine Variable namevon einer Klasse Humanvon einer Variablen namevon einer Methode zu unterscheiden setName. Um dieses Problem zu lösen, wurde das Schlüsselwort eingeführt this, das in diesem Fall darauf hinweist, dass es notwendig ist, eine Variable nicht einer Methode, sondern aufzurufen einer Klasse Human:
Verschlagworten Sie dies {in Beispielen} – 6
Das heißt, thises bezieht sich auf das aufrufende Objekt, wie am Anfang des Artikels gesagt wurde. Dadurch setNamewird der Name der Person über den Setter auf das erstellte Objekt gesetzt. Unten ist der Code ohne Verwendung des Schlüsselworts this. Der Code erstellt ein Klassenobjekt Humanund gibt ihm einen Namen:
Verschlagworten Sie dies {in Beispielen} – 7
Und unten ist der Programmcode mit dem Schlüsselwort 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);
    }
}
Dadurch wird thisvermieden, dass neue Variablen eingeführt werden, um dasselbe zu bezeichnen, wodurch der Code weniger mit zusätzlichen Variablen „überladen“ wird.

Beispiel zwei – Verwenden Sie dies, um einen Konstruktor explizit aufzurufen

Das Aufrufen eines Konstruktors von einem anderen aus kann nützlich sein, wenn Sie (seltsamerweise) mehrere Konstruktoren haben und den zuvor im Konstruktor angegebenen Initialisierungscode nicht in einem neuen Konstruktor umschreiben möchten. Verwirrt? Alles ist nicht so beängstigend, wie es scheint. Schauen Sie sich den Code unten an, er hat zwei Klassenkonstruktoren 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){
        //Sie rufen den Konstruktor mit zwei Parametern auf
        this(age, weight);
        //und die fehlende Variable hinzufügen
        this.height = height;
    }
}
Hier haben wir zunächst einen Zwei-Parameter-Konstruktor, der int ageand akzeptiert int weight. Nehmen wir an, wir haben darin zwei Codezeilen geschrieben:
this.age = age;
this.weight = weight;
und dann beschlossen sie, einen weiteren Konstruktor mit drei Parametern hinzuzufügen, der neben Alter und Gewicht auch die Größe berücksichtigt. Im neuen Konstruktor könnten Sie Folgendes schreiben:
this.age = age;
this.weight = weight;
this.height = height;
Aber anstatt den Code zu wiederholen, den Sie bereits in diesem Konstruktor geschrieben haben, können Sie ein Schlüsselwort verwenden, um thisden Konstruktor explizit mit zwei Parametern aufzurufen:
this(age, weight);
// und die fehlende Variable hinzufügen:
this.height = height;
Sie sagen dem Konstruktor also gewissermaßen drei Parameter:
  • Rufen Sie diesen Konstruktor auf, der zwei Parameter hat.
  • und fügen Sie die fehlende Variable hinzu.
Das ist alles =). Abschließend stellen wir fest, dass das Schlüsselwort this in Java nur als Teil von Methoden oder Konstruktoren einer Klasseninstanz verwendet wird. Aber implizit wird das Schlüsselwort thisan alle Methoden außer statischen übergeben (daher thiswird es oft als impliziter Parameter bezeichnet) und kann verwendet werden, um auf das Objekt zu verweisen, das die Methode aufgerufen hat. Vor diesem Schlüsselwort braucht man keine Angst zu haben, denn Thises ist nicht gruselig.
Verschlagworten Sie dies {in Beispielen} – 9
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION