Dies ist ein impliziter Zeiger auf sich selbst. Einfach ausgedrückt: Welches Objekt die Methode aufruft, in der sich dieses befindet, dann ist dies dieses Objekt.
Beispielcode: TestThis_1.java
Kopieren Sie den Codecode wie folgt:
/* Frage: Was ist das?
* Ausgabeergebnis:
* A@4e44ac6a
*/
öffentliche Klasse TestThis_1 {
public static void main(String[] args) {
A aa = neues A();
System.out.println(aa.f()); //aa.f(), gibt die Referenz (Zeiger) des Objekts aa zurück
}
}
Klasse A {
public A f() {
return this; //Eine Referenz auf das Klasse-A-Objekt des Objekts zurückgeben, das die f()-Methode aufruft
}
}
Häufige Verwendungen davon
1. Unterscheiden Sie Variablen mit demselben Namen
Beispielcode: TestThis_2.java
Kopieren Sie den Codecode wie folgt:
/* Häufige Verwendung davon 1: Unterscheiden Sie Variablen mit demselben Namen
* Ausgabeergebnis:
* dies. i = 1
* i = 33
*/
öffentliche Klasse TestThis_2 {
public static void main(String[] args) {
A aa = neues A(33);
}
}
Klasse A {
public int i = 1; //Dieses i ist eine Mitgliedsvariable
/*Hinweis: Im Allgemeinen nicht so geschrieben, der Konstruktor dient hauptsächlich der Initialisierung und so geschrieben dient hauptsächlich dem besseren Verständnis*/
public A(int i) { //Dieses i ist eine lokale Variable
System.out.printf("this. i = %d/n", this.i); //this.i verweist auf die Mitgliedsvariable i des Objekts selbst
System.out.printf("i = %d/n", i); //i hier ist die lokale Variable i
}
}
2. Gegenseitige Aufrufe zwischen Konstruktoren
Beispielcode: TestThis_3.java
Kopieren Sie den Codecode wie folgt:
/* Allgemeine Verwendung dieser 2: gegenseitige Aufrufe im Konstruktor */
öffentliche Klasse TestThis_3 {
public static void main(String[] args) {
}
}
Klasse A {
int i, j, k;
öffentliches A(int i) {
this.i = i;
}
public A(int i, int j) {
/* i = 3; error Wenn nicht auskommentiert, wird ein Fehler gemeldet: Beim Aufruf des Konstruktors mit this(...) kann er nur im ersten Satz platziert werden
* TestThis_3.java:20: Fehler: Der Aufruf hierfür muss die erste Anweisung im Konstruktor sein
* dies(i);
* ^
*1 Fehler
*/
dies(i);
this.j = j;
}
public A(int i, int j, int k) {
this(i, j);
this.k = k;
}
}
Dinge zu beachten
Durch Static geänderte Methoden haben diesen Zeiger nicht. Da die durch static geänderte Methode öffentlich ist, kann nicht gesagt werden, zu welchem spezifischen Objekt sie gehört.
Beispielcode: TestThis_4.java
Kopieren Sie den Codecode wie folgt:
/*In der statischen Methode gibt es keinen This-Zeiger*/
öffentliche Klasse TestThis_4 {
public static void main(String[] args) {
}
}
Klasse A {
statisch A f() {
gib dies zurück;
/* Fehlermeldung: TestThis_4.java:10: Fehler: Nicht statische Variable, auf die nicht aus einem statischen Kontext verwiesen werden kann
* gib dies zurück;
* ^
*1 Fehler
*/
}
}