referência this

8 respostas
mirrah

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

8 Respostas

WendersonLP

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;
    }
}
M

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.

Lindberg

ola galera

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

obrigado :shock:

M

Lindberg:

ola galera

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

obrigado


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

B

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

Veja um exemplo:

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
    }
}
M
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.
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());
	}
}
Boa sorte!
magocebolinha

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:

Lindberg

valeu galera …
obg

Criado 3 de abril de 2010
Ultima resposta 7 de abr. de 2010
Respostas 8
Participantes 6