referência this

Estou iniciando no java e não estou intendendo muito bem a referência this. Do que se trata e para que serve?

Serve para referenciar atributos e métodos da classe.

public class Referencia {
    private int    number1;
    private float number2;

    public void setNumber1(int number1) {
         // nesse casa se você não colocar a referência "this" 
         // o compilador irá achar que você está querendo
         // atribuir à variável passada como parâmetro o seu 
         // próprio valor
         this.number1 = number1;
    }

    public void setNumber2(float number2) {
       // aqui como não tem referência "this"
       // indica que você está atribuindo o valor
       // da variável passada a ela própria e não
       // ao atributo da classe
       number2 = number2;
    }
}

this contem uma referência para a instância corrente de um objeto.
Logo, com this., é possível acessar atributos e métodos (ambos conhecidos com membros) de uma instância de um objeto.

ola galera

é possivel exclarecer esse tópico com duas classes, e com mais detalhes.

obrigado :shock:

[quote=Lindberg]
ola galera

é possivel exclarecer esse tópico com duas classes, e com mais detalhes.

obrigado [/quote]
Concordo, mas confesso que não entendi se você fez uma afirmação ou se queria fazer uma pergunta (!).

this refere-se ao objeto pelo qual um método de instância foi chamado.

Veja um exemplo:

[code]public class TesteThis {

public boolean souEu(Object obj) {
    if (this == obj) { return true; }
    return false;
}

public static void main(String[] args) {
    TesteThis tt = new TesteThis();
    TesteThis tt2 = new TesteThis();
    TesteThis tt3 = tt2;
    System.out.println(tt.souEu(tt));     // true
    System.out.println(tt2.souEu(tt2));   // true
    System.out.println(tt.souEu(tt2));    // false
    System.out.println(tt3.souEu(tt2));   // true
}

}[/code]

Cada objeto instanciado ocupa um espaço de memória heap.
E cada objeto tem os seus próprios membros (atributos, métodos, classes internas).
Ok, então declaramos uma variável e ela terá a referência para um objeto na memória.
Suponha várias variáveis com o mesmo tipo de referência declarado, isto é: Tipo-de-referencia-declarado nome-da-variavel; Exemplo: MinhaClasse mc1, mc2, mc3;
Então instanciamos cada variável com um objeto: mc1 = new MinhaClasse(); mc2 = new MinhaClasse(); mc3 = new MinhaClasse();Quando invocamos um método de um desses 3 objetos criados e esse método fizer uso do this significa que o this acionará algo referente àquela instância do objeto. Se invocamos mc3.metodoQualquer();o metodoQualquer que será executado é aquele do objeto referenciado por mc3. Logo uma chamada a this dentro do metodoQualquer acionará algum membro do objeto referenciado por mc3.
Na verdade cada objeto é independente e nem sabe da existência do outro.

[code]public class TesteThis {

public static void main(String[] args) {

	Ping pinguinho = new Ping();
	System.out.println("\nMinha referência: " + pinguinho);
	pinguinho.ping();

	Ping pingao = new Ping();
	System.out.println("\nMinha referência: " + pingao);
	pingao.ping();

	Pong ponguinho = new Pong();
	System.out.println("\nMinha referência: " + ponguinho);
	ponguinho.pong();

	Pong pongao = new Pong();
	System.out.println("\nMinha referência: " + pongao);
	pongao.pong();
}

}

class Ping {
public void ping() {
System.out.println("Estou pingando em " + this.toString());
}
}

class Pong {
public void pong() {
System.out.println("Estou pongando em " + this.toString());
}
}[/code]
Boa sorte!

Cara… levando em conta que você esteja começando mesmo, simplificando a coisa, guarda o seguinte:


class Teste {
	
	String nome = "Ricardo";
	
	
	public void setNome( String nome ) {
		this.nome = nome;
	}
}

Você viu que foi declarado um atributo com o valor “Ricardo”?


        String nome = "Ricardo";

O nome deste atributo é nome não é? se eu quero deixar meu código mais claro não preciso fazer meu código assim:


          public void setNome (String n1) {
          n1 = nome;
}

ou seja… criar um parâmetro com um nome diferente do nome do valor que será recebido (acredite… isso em um código grande pode virar um problema)
então faço assim:


	public void setNome( String nome ) {
		this.nome = nome;
	}

o this referencia a variavel declarada na classe! que fazer um teste? copie esse código e tente compila-lo sem o this antes do primeiro “nome”!
fica mais claro dessa forma não é?

Este é o conceito de BOA PRÁTICA, ou seja… você pode fazer de duas formas (ou de varias formas quando falamos de POG) sendo que uma vai facilitar o trabalho de muita gente e vai fazer da comunidade java uma comunidade mais feliz se você trabalhar de forma mais legível e mais organizada entendeu??

(nossa fui fundo agora :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: )

:shock:

valeu galera …
obg