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
)
:shock:
valeu galera …
obg