This

o this não é obrigado a usar certo??

por que então usa-lo…ele melhora a legibilidade do codigo ou algo assim?

Não só a legibilidade mas tb há situação em q se não usá-lo o seu método não funcionará
direito, quer um exemplo? Veja:

Detalhe, estou numa máquina q não tem Java muito menos Eclipse instalado, fiz de cabeça, pode haver erros…

private final int idadeDoAndreAS = 22;

private int calculaIdadeDoAndreAS(int idadeDoAndreAS){ int recebe = idadeDoAndreAS + idadeDoAndreAS ; return recebe; }

Se vc executar teste código, chamando o método Main, veja:

public static void main(String args[]){ System.out.println(calculaIdadeDoAndreAS(10)); }

A menos q vc use o this terá um bug na lógica do cálculo, pois a idéia seria somar minha idade atual mais um valor passado de argumento, não? Então pq deu 20? Tente descubrir…

Em situações onde o this serve apenas para deixar o código mais legível, eu acho que não faz diferença (opinião particular minha). Mas em algumas situações sua utilização é essencial:

[code]String nome; // Variável de instância chamada nome.

public void setNome(String nome) { // O parâmetro é uma variável local que também se chama nome.
this.nome = nome; // O this é quem diferencia a variável de instância “nome” da variável local “nome”. Aqui o this não é opcional, pois se não utilizá-lo, estarei trabalhando apenas com a variável local.
}[/code] Se precisar retornar ou passar o próprio objeto como parâmetro, também se usa o this.

[code]public class MinhaClasse { …

public MinhaClasse setNome(String nome) { // Estou declarando que o retorno será uma referência a MinhaClasse
this.nome = nome;
return this; // Retorna a referência do próprio objeto.
}[/code]

Adorei o exemplo…

Só complementando, veja uma discussão sobre este assunto daqui do fórum:
http://www.guj.com.br/posts/list/65098.java

Boa explicação eric…ficou mais legivel agora :slight_smile:

Também não sei bem o porque usar (a não ser como mostrado pelo andredecotia) mas costumo usar em todos os meus métodos com prefixo set (pois quase sempre coloco parâmetro com o mesmo nome do atributo) também uso quando preciso construir (não sei se é o termo correto) um objeto que implementei na mesma class ex:

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

@SuppressWarnings(“serial”)
public class UsoDoThis extends JFrame implements ActionListener {

public UsoDoThis(){
	JButton bt = new JButton("botão de teste"); 
	bt.addActionListener(this); // o this nesse caso indica o novo ActionListener que contruí ao implementar ActionListener
	this.add(bt);// nesse caso o this é opcional
	this.setSize(600,400); //nesse tambem
	this.setVisible(true); //nesse tambem
}

@Override
public void actionPerformed(ActionEvent arg0) {
	JOptionPane.showMessageDialog(this, "botão clicado"); // o this nesse caso indica o novo Component que contruí ao extender JFrame 

}
public static void main(String[] args) {
	new UsoDoThis();

}

}[/code]

Obs: Sou novato em programação portanto não sei se os termos que utilizei para explicar estão corretos ou apropriados

Eu não gosto de ficar usando this em todo lugar (exceto no caso que o Eric citou). Mas acho que esse tema é de tão pouca relevância que você deve apenas definir um padrão, ou seguir o da sua equipe, e usa-lo.

Ele não melhora fantasticamente a legibilidade, nem vai ser por isso que você vai ser um programador melhor ou pior.
Geralmente é questão de gosto.