Dúvidas sobre this

6 respostas
L

Opa iae gente… estou com uma pequena dúvida sobre this, tentei tirar com o professor, mais ele me deixou mais confuso e queria entender onde usar esse this, vou mostrar parte de um exercicio que eu fiz em sala e o professor falou que não precisava de this nos metodos agora a pergunta é… eu uso this para referenciar aquele valor de um determinado objeto, logo eu só devo usar this quando eu passar algum parametro como por exemplo construtores, metodos sets e metodos que recebem parametros?

Meu exemplo que fiz em sala…

public class Retangulo {
	private int largura, altura;
	
	public Retangulo() {
		
	}
	public Retangulo(int largura, int altura) {
		this.largura = largura;
		this.altura = altura;
	}
	
	public void setLargura(int largura) {
		this.largura = largura;
	}
	public int getLargura() {
		return largura;
	}
	public void setAltura(int altura) {
		this.altura = altura;
	}
	public int getAltura() {
		return altura;
	}
	
	public int area() {
		return this.largura*this.altura;
				
	}
	
	public int perimetro() {
		return (2*this.largura)+(2*this.altura);		
		
	}
	
}
public class TestaRetangulo {
	public static void main(String[] args) {
		Retangulo r1 = new Retangulo();
		r1.setLargura(5);
		r1.setAltura(3);
		System.out.println("Largura: " + r1.getLargura());
		System.out.println("Altura: " + r1.getAltura());
		System.out.println("A área do Retângulo é: " + r1.area());
		System.out.println("O perimetro do Retângulo é: " + r1.perimetro());
		System.out.println();
		Retangulo r2 = new Retangulo(2, 7);
		System.out.println("Largura: " + r2.getLargura());
		System.out.println("Altura: " + r2.getAltura());
		System.out.println("A área do Retângulo é: " + r2.area());
		System.out.println("O perimetro do Retângulo é: " + r2.perimetro());
		
	}

}

Onde ele criticou é nos métodos area() e perimetro() que realmente rodam sem o this, mas um outro professor meu disse que dessa forma com o this fica um código mais bonito x_x e então… onde usar this… somente em construtores, metodos sets e metodos que recebem parametros?

obrigado a todos :wink:

6 Respostas

Fernando_Generoso_da

O this tu utiliza para referenciar uma variavel global, da classe. no teu exemplo, tu recebe parametros com o mesmo nome de variáveis globais. se tu nao utilizar o this em uma das tariáveis,

public void setLargura(int largura) {   
        this.largura = largura;   
    }

o compilador não iria conseguir distinguir uma variável da outra. Portanto, é necessário SEMPRE utilizar o this nesses casos. Em outros casos, quadno variáveis locais não tem o mesmo nome de variáveis globais, não é necessário o uso.

Não sei se consegui resolver sua dúvida…

victorwss

Vamos colocar assim:

Todo o objeto necessita de uma forma de acessar a si mesmo. Essa forma é o this.

T

Eu, em particular, não gosto muito do “this” - acho que ele não deve ser abusado. Eu preferiria usar isto aqui:

public void setLargura(int L) {  
         largura = L;  
     }

que acho mais claro. Mas isso, é óbvio, é questão de padrão. Por exemplo, já vi lugares em que você tem de usar:

public void setLargura(int pLargura) {  
         largura = pLargura;  
     }
gertmuller

Fernando Generoso da Rosa:
O this tu utiliza para referenciar uma variavel global, da classe. no teu exemplo, tu recebe parametros com o mesmo nome de variáveis globais. se tu nao utilizar o this em uma das tariáveis,

public void setLargura(int largura) {   
        this.largura = largura;   
    }

o compilador não iria conseguir distinguir uma variável da outra. Portanto, é necessário SEMPRE utilizar o this nesses casos. Em outros casos, quadno variáveis locais não tem o mesmo nome de variáveis globais, não é necessário o uso.

Não sei se consegui resolver sua dúvida…

Na verdade, o this serve pra referencia qualquer coisa que pertenca à classe. No exemplo do tópico:

public Retangulo(int largura, int altura)
{
       this.largura = largura;  
       this.altura = altura;  
}

a variável largura que é acompanhada pelo this pertence à classe, e não ao método. O mesmo funciona para chamada de métodos. Se alguma variável local tem o mesmo nome de um método, você usará o this acompanhado a chamada do método, pois o método pertence à classe, como dito anteriormente.

:slight_smile:

adriano_si

Como amigo acima falou, isso é questão de padronização… parece até piada, mas ainda ontem a noite decidi usar o this em todas as minhas chamadas locais, assim acredito que vai ficar mais fácil pra identificar as coisas…

Se eu me bater muito, mudo meu padrão… Vamos ver… hehehehe

ViniGodoy

O this é uma referência que o objeto tem a si mesmo.

Fazendo uma analogia, seria algo mais ou menos assim (isso não é válido em Java):

UmaClasse umObjeto = new UmaClasse();
UmaClasse this = umObjeto;

Agora imagine que isso é feito automaticamente, a cada new da sua classe. E que aquele this, ao invés de ficar fora da classe (como no exemplo) fica dentro.

Isso permite que você possa:
1. Resolver conflitos de nomes (desambiguação).

public class UmaClasse {
   public void setAtributo(String nome) {
      //Estamos dizendo aqui que o objeto da classe UmaClasse, que foi criado com 
      //o new, irá receber em seu atributo nome o nome passado por parâmetro.
      this.nome = nome;
   }
}

2. Permite que a classe passe a si mesmo como parâmetro:

public class UmaClasse implements Runnable {
   public void run() { //Faz alguma coisa }

   public void iniciar() {
      //A classe thread precisa receber um objeto Runnable em seu parâmetro.
      //Essa classe é um Runnable. Como faríamos para disparar uma thread 
      //com um objeto de nossa própria classe aumaticamente?

      //Precisamos dizer a thread que o próprio objeto é um Runnable e fazemos 
      //isso através do this.
      Thread t = new Thread(this);
      t.start();
   }
}

Agora a pegadinha. O this tem outro significado completamente diferente. Então, não confunda. Quando estamos dentro do construtor, o this é usado para chamar outro construtor, declarado em sua classe. Nesse caso, você verá o this na primeira linha do construtor e usado como se fosse uma função:

public void UmaClasse {
   private String nome;

   public UmaClasse(String umNome) {
      this.nome = nome; //Mesmo uso do this do primeiro exemplo.
   }

   public UmaClasse() {
      //Parece uma função, não? Estamos usando o this 
      //para chamar o construtor acima.
      this("Plunkt Plakt Zum"); 
   }
}
Criado 29 de setembro de 2008
Ultima resposta 30 de set. de 2008
Respostas 6
Participantes 7