este é um ponteiro implícito para si mesmo. Simplificando, qual objeto chama o método onde this está localizado, então este é esse objeto.
Código de amostra: TestThis_1.java
Copie o código do código da seguinte forma:
/* Pergunta: O que é isso
* Resultado de saída:
*A@4e44ac6a
*/
classe pública TestThis_1 {
public static void main(String[] args) {
Uma aa = nova A();
System.out.println(aa.f()); //aa.f(), retorna a referência (ponteiro) do objeto aa
}
}
classe A {
público A f() {
return this; //Retorna uma referência ao objeto da classe A do objeto que chama o método f()
}
}
Usos comuns deste
1. Distinguir variáveis com o mesmo nome
Código de amostra: TestThis_2.java
Copie o código do código da seguinte forma:
/* Uso comum deste 1: Distinguir variáveis com o mesmo nome
* Resultado de saída:
* isto.
* eu = 33
*/
classe pública TestThis_2 {
public static void main(String[] args) {
A aa = novo A(33);
}
}
classe A {
public int i = 1; //Este i é uma variável de membro
/*Nota: Geralmente não escrito assim, o construtor é principalmente para inicialização, e escrito assim é principalmente para facilitar o entendimento*/
public A(int i) { //Este i é uma variável local
System.out.printf("this. i = %d/n", this.i); //this.i refere-se à variável membro i do próprio objeto
System.out.printf("i = %d/n", i); //i aqui é a variável local i);
}
}
2. Chamadas mútuas entre construtores
Código de amostra: TestThis_3.java
Copie o código do código da seguinte forma:
/* Uso comum deste 2: chamar um ao outro no construtor */
classe pública TestThis_3 {
public static void main(String[] args) {
}
}
classe A {
int eu, j, k;
público A (int i) {
isto.i = i;
}
público A(int i, int j) {
/* i = 3; erro Se não for comentado, será reportado um erro: Ao chamar o construtor com this(...), ele só pode ser colocado na primeira frase
* TestThis_3.java:20: erro: a chamada para isto deve ser a primeira instrução no construtor
* isto(eu);
* ^
*1 erro
*/
isto(eu);
isto.j = j;
}
público A(int i, int j, int k) {
isto(eu,j);
isto.k = k;
}
}
Coisas a serem observadas
Métodos modificados por static não possuem este ponteiro. Como o método modificado por static é público, não se pode dizer a qual objeto específico ele pertence.
Código de amostra: TestThis_4.java
Copie o código do código da seguinte forma:
/*Não existe este ponteiro dentro do método estático*/
classe pública TestThis_4 {
public static void main(String[] args) {
}
}
classe A {
estático A f() {
devolva isso;
/* Mensagem de erro: TestThis_4.java:10: erro: variável não estática não pode ser referenciada a partir de um contexto estático
* devolva isso;
* ^
*1 erro
*/
}
}