este es un puntero implícito a sí mismo. En pocas palabras, qué objeto llama al método donde se encuentra, entonces este es ese objeto.
Código de muestra: TestThis_1.java
Copie el código de código de la siguiente manera:
/* Pregunta: ¿Qué es esto?
* Resultado de salida:
*A@4e44ac6a
*/
clase pública PruebaEsto_1 {
público estático vacío principal (String [] argumentos) {
A aa = nueva A();
System.out.println(aa.f()); //aa.f(), devuelve la referencia (puntero) del objeto aa.
}
}
clase A {
público A f() {
return this; //Devuelve una referencia al objeto de clase A del objeto que llama al método f()
}
}
Usos comunes de este
1. Distinguir variables con el mismo nombre
Código de muestra: TestThis_2.java
Copie el código de código de la siguiente manera:
/* Uso común de esto 1: Distinguir variables con el mismo nombre
* Resultado de salida:
* esto.
* yo = 33
*/
clase pública PruebaEsto_2 {
público estático vacío principal (String [] argumentos) {
A aa = nuevo A(33);
}
}
clase A {
public int i = 1; //Esta i es una variable miembro
/*Nota: Generalmente no se escribe así, el constructor es principalmente para inicialización, y escrito así es principalmente para facilitar la comprensión*/
public A(int i) { //Esta i es una variable local
System.out.printf("this. i = %d/n", this.i); //this.i se refiere a la variable miembro i del objeto mismo
System.out.printf("i = %d/n", i); //i aquí está la variable local i
}
}
2. Llamadas mutuas entre constructores.
Código de muestra: TestThis_3.java
Copie el código de código de la siguiente manera:
/* Uso común de este 2: llamarse entre sí en el constructor */
clase pública PruebaEsto_3 {
público estático vacío principal (String [] argumentos) {
}
}
clase A {
int i, j, k;
público A (int i) {
esto.i = i;
}
público A(int i, int j) {
/* i = 3; error Si no se comenta, se informará un error: Al llamar al constructor con this(...), solo se puede colocar en la primera oración.
* TestThis_3.java:20: error: la llamada a esto debe ser la primera declaración en el constructor
* esto(yo);
* ^
*1 error
*/
esto(yo);
esto.j = j;
}
público A(int i, int j, int k) {
esto(i,j);
esto.k = k;
}
}
Cosas a tener en cuenta
Los métodos modificados por estática no tienen este puntero. Debido a que el método modificado por estática es público, no se puede decir a qué objeto específico pertenece.
Código de muestra: TestThis_4.java
Copie el código de código de la siguiente manera:
/*No existe este puntero dentro del método estático*/
clase pública PruebaEsto_4 {
público estático vacío principal (String [] argumentos) {
}
}
clase A {
estática A f() {
devolver esto;
/* Mensaje de error: TestThis_4.java:10: error: variable no estática a la que no se puede hacer referencia desde un contexto estático
* devolver esto;
* ^
*1 error
*/
}
}