Referencia this

12 respostas
blackfalcon

Ola pessoal, alguem poderia me explicar como funciona a referencia this?

Eu procurei dar uma estudada mas nao entendi muito bem nao…

O que eu cheguei a entender era que o this se referencia por exemplo a variavel de instancia de um objeto…

nem sei se esta certo o que estou falando…

Alguem poderia explicar fazendo favor? Desde ja, obrigado!

Abraços

12 Respostas

pimenta

this faz referência à classe. Por exemplo:

public class ExemploClasse{
	String a;
	
	public void ExemploClasse(String a){
		this.a = a; //Nesse caso o this informa que a variável referenciada por ele
					//é a variável de instância, ou seja, "this.a" (a variável de instância "a")
					//recebe o valor de "a" (variável local)
	}
}

Entendeu?

Marcio_Nogueira

A palavra reservada this é utilizada para fazer referência às variáveis de instância dentro da classe em questão. Veja um exemplo:

this.nome = nome;

Um abraço. :wink:

sergiotaborda

blackfalcon:
Ola pessoal, alguem poderia me explicar como funciona a referencia this?

Eu procurei dar uma estudada mas nao entendi muito bem nao…

O que eu cheguei a entender era que o this se referencia por exemplo a variavel de instancia de um objeto…

Sim, mas não de um objeto qualquer e não em um lugar qualquer.
this (que significa “este” ) é utilizado para fazer referencia ao objeto de dentro dele mesmo.
O porquê de ser necessário tem a haver com uma característica de java chamada sombreamento, a qual tem a ver com uma característica de progamação chamada escopo de variáveis.

this não faz referencia a classe nenhuma e não serve apenas para referenciar atributos ou metodos. Exemplo

class MyClass {

  private int a;

  public MyClass (int a ){
        this.a = a;
   }

   private MyClass (MyClass other){
       this.a = other.a;
   }
public Object clone(){

  return new MyClass (this);
}

}
B

this refere-se ao próprio objeto que está executando o código.

É importante dizer que ele se refere ao objeto instanciado, e não à classe. Tanto é que colocar o this em contextos static não funciona, pois estes pertencem à classe, e não à instância.

blackfalcon

renrutal:
this refere-se ao próprio objeto que está executando o código.

É importante dizer que ele se refere ao objeto instanciado, e não à classe. Tanto é que colocar o this em contextos static não funciona, pois estes pertencem à classe, e não à instância.

Entao quer dizer que o this so é usado em um codigo, por exemplo, se nele tiver:

Classe1 teste = new Classe1();

Isso que disse esta certo? oO

Abraços

B

new é a palavra-chave que instancia objetos de uma classe, e this só pode ser usado dentro de uma instância, então sim, o this depende do new para existir.

Edit: Nesse Classe1, this pode estar dentro dos métodos de instância(métodos sem o modificador static) da classe.

blackfalcon

E se por exemplo, dentro de minha aplicação tiver o seguinte codigo:

Classe1 teste1 = new Classe1();
Classe2 teste2 = new Classe2();

E em cada classe tiver a variavel de instancia nome. Se eu colocar this.nome ele vai se referenciar a qual objeto? Ira travar a aplicação? E se caso eu precisar acessar essa variavel de instancia, como faria isso sem o this?

Abraços

pimenta

blackfalcon, o this só é usado dentro de uma classe pra referenciar a própria classe.

quando você faz:

this.nome

Você estará acessando a variável de instância nome daquela classe. this, na verdade, é uma referência de um objeto daquela própria classe.

quando você faz:

metodoExemplo(this)

Você estará passando para o método metodoExemplo() uma referência de objeto daquela classe.

Melhorou ou terminou de complicar tudo? aiaiuhahahuha

Abraços,

B

blackfalcon:
E se por exemplo, dentro de minha aplicação tiver o seguinte codigo:

Classe1 teste1 = new Classe1();
Classe2 teste2 = new Classe2();

E em cada classe tiver a variavel de instancia nome. Se eu colocar this.nome ele vai se referenciar a qual objeto? Ira travar a aplicação? E se caso eu precisar acessar essa variavel de instancia, como faria isso sem o this?

Abraços

this.nome dentro de teste1 referencia à variável de instância nome, do objeto teste1.
this.nome dentro de teste2 referencia à variável de instância nome, do objeto teste2.

Como cada instância é independente(excetos pelos atributos marcados como static), mudar o valor de this.nome em teste1 não muda o valor de this.nome em teste2.

fabio.b.salvador

This é uma referência que o objeto faz a si mesmo. Assim, se eu crio uma classe PESSOA

class pessoa { String nome; int idade; void aniversario() { this.idade++; } }

Nesta classe, eu tenho um método no qual diz que uma PESSOA consegue fazer ANIVERSARIO, adicionando mais um à sua própria idade.
Assim, se eu tiver 2 pessoas:

pessoa P1 = new pessoa(); pessoa P2 = new pessoa();

E eu atribuir uma idade a essas pessoas - digamos que elas têm, ambas, 30 anos.

Então, se eu mando P1 fazer ANIVERSARIO, ele vai dizer:

THIS (ou seja, esta pessoa, o P1).idade ++
Daí, P1 tem 31 anos enquanto P2 continua com 30.

É preciso compreender que a classe é um molde a partir do qual serão formados os objetos. E que quando uma classe diz THIS, falando de si mesma, na verdade são seus objetos que vão falar de si mesmos. No meu exemplo, um objeto PESSOA faz um cálculo com um atributo de SI MESMO, aumentando a própria idade.

fvargas_tkd

Todos os exemplos são muito bons, mas este das pessoas me ajudou muito a entender, eu também estou começando, e quando procuro aqui no fórum as informações que preciso, fico entusiasmado em ver o quanto a gurizada que já trabalha a algum tempo com java sabe mesmo das coisas. Parabéns a todos e um abraço.
Fábio - Poa

peczenyj

Imagine se não houvesse this.

Vc teria que ter métodos estáticos que recebessem o objeto como argumento.

Ou seja, ao invés de:

class Pessoa{ int idade; public int getIdade() { return this.idade; } public void setIdade(int idade) { this.idade = idade; } public static void main(String [] args){ Pessoa p = new Pessoa(); p.setIdade(10); System.out.println("A idade da pessoa eh "+ p.getIdade()); } }

Vc teria que fazer:

class Pessoa{ int idade; public static int getIdade(Pessoa p) { return p.idade; } public static void setIdade(Pessoa p,int idade) { p.idade = idade; } public static void main(String [] args){ Pessoa p = new Pessoa(); Pessoa.setIdade(p,10); System.out.println("A idade da pessoa eh "+ Pessoa.getIdade(p)); } }

Complicado, não? Bom, algumas linguagens de programação funcionam assim, inclusive Python (apesar de que isso é feito via syntax sugar, um p.getIdade() é transformado em Pessoa.getIdade§ pois getIdade tem como primeiro parâmetro self, ou seja o objeto mesmo, mas isso é uma questão histórica). Perl é assim, C é assim (Se bem que vc não tem Classes em C, mas pode ter estruturas com ponteiros para funções).

Ai entra uma boa observação no Java: em método estático não faz sentido ter this. :wink:

Criado 18 de maio de 2008
Ultima resposta 9 de out. de 2008
Respostas 12
Participantes 8