Utilidade do this...!

18 respostas
P
Temos assim um codigo:



[b]private String from;

private String to;

private String message;


public MailItem(String from, String to, String message)

{

this.from = from;

this.to = to;

this.message = message;

}[/b]

A utilidade do this? Se this.from=from, o primeiro from é a variavel, e segundo from o parametro, certo? Mas que utilidade tem essa declaração,o this? …
Digam algo.
Se for só this.from; Este this diz que o from refere-se a variavel de instancia e não a variavel local, evitando assim confusoes, né?
Espero dicas.

18 Respostas

T

Uns clientes nossos, notando que isso é muito confuso, requerem que o código seja escrito assim:

..
private String from;
private String to;
private String message;
...

public MailItem(String pFrom, String pTo, String pMessage) {
    from = pFrom;
    to = pTo;
    message = pMessage;
}

onde os parâmetros têm uma letra “p” só para diferenciar das variáveis de instância.

T

De fato, é realmente difícil ter de usar “this” em Java.

Um uso dele é para remover a ambiguidade entre o nome do parâmetro e o nome da variável de instância, tal como no código que você mostrou.

O outro é quando você precisa passar o próprio objeto para outra rotina:

JOptionPane.showMessage (this, ...);
P
Percebi, fine!

obrigado.

Este codigo é melhor programação? (sem o this)

[b]

private String from;

private String to;

private String message;


public MailItem(String pFrom, String pTo, String pMessage) {

from = pFrom;

to = pTo;

message = pMessage;

} [/b]

Nao entendi: JOptionPane.showMessage (this, …);

P

Mas indo mais a fundo da questao.

Dizer que uma variavel de instancia toma o valor de uma parametro, que utilidade tem?

diego2005

Como o Thingol disse, o this sozinho é o objeto em questão, por exemplo:

public class Teste
{
   public void informacoes()
   {
        System.out.println(this); // imprime algo como: Teste@10b62c9
   }
   
   public static void main(String[] args)
   {
   	  new Teste().informacoes();
   }
}
diego2005
paulovr:
Mas indo mais a fundo da questao.

Dizer que uma variavel de instancia toma o valor de uma parametro, que utilidade tem?

Por exemplo, você tem uma classe Numero, que armazena apenas um valor (int num), os usuários dessa classe podem manipular esse valor (modificar, capturar, etc). Então para modificar esse valor, você fornece um método, passando para esse método um parâmetro, que será o novo valor dessa variável, por exemplo:

public class Numero
{
   private int num;

   public Numero(int num)
   {
       this.num = num;
   }

   public void setNum(int num)
   {
        this.num = num;
   }

   public int getNum()
   {
       return num; // não é necessário o this
   }
  
   public static void main(String[] args)
   {
       Numero n = new Numero(10); // cria um nome Numero com valor 10
       System.out.println(n.getNum); // imprime o valor de n (10)
       n.setNum(20); // seta o valor de num para 20
       System.out.println(n.getNum); // imprime o valor de n (20)
   }
}

Espero que tenha ajudado..

ramilani12

A real utilidade do this é referenciar o próprio da objeto da classe :

public MailItem(String from, String to, String message) 
{ 
this.from // objeto da classe= from // variavel de parametro; 
this.to = to; 
this.message = message; 
}

Outra forma sem o this

public MailItem(String pfrom, String pto, String pmessage) 
{ 
from = pfrom // variavel de parametro; 
to = pto; 
message = pmessage; 
}
P
public class Teste
 {
    public void informacoes()
    {
         System.out.println(this); // imprime algo como: Teste@10b62c9
    }
    
    public static void main(String[] args)
    {
    	  new Teste().informacoes();
    }
 }

Porque imprime Teste@10b62c9?
O System.outprintln(this) imprime o q afinal? não existem variaveis, nem valores, n entendi.

P
public class Numero
 {
    private int num;
 
    public Numero(int num)
    {
        this.num = num;
    }
 
    public void setNum(int num)
    {
         this.num = num;
    }
 
    public int getNum()
    {
        return num; // não é necessário o this
    }
   
    public static void main(String[] args)
    {
        Numero n = new Numero(10); // cria um nome Numero com valor 10
        System.out.println(n.getNum); // imprime o valor de n (10)
        n.setNum(20); // seta o valor de num para 20
        System.out.println(n.getNum); // imprime o valor de n (20)
    }
 }

Atenção, assim nao funciona, pois tem de ser n.getNum()!
Não existe codigo repetido? O metodo Numero e o setNum sao iguazinhos! Não sera ma programação? REdundancia!
Sim entendi a utilidade.
thanks

peczenyj

paulovr

Numero não é um método, pois vc não declarou um tipo de retorno, percebeu?

Quando vc tem algo parecido com um método com um modificador de acesso (public, private, etc…) e ele tem o mesmo nome da classe, isso se chama Construtor.

O construtor inicia algum codigo na sua classe, se necessário. Nesse caso vc tem um construtor que informa o atributo num com algum valor.

P

Sim entendi!
Mas Numero é metodo sim! Aprendi assim! É metodo constructor! Mas não deixa de ser metodo!
A grande utilidade do constructores é qual? Construir objectos?

P

dois metodos com linhas de codigo iguais não é redundancia?
Estamos a falar de metodos com assinaturas diferentes mas com linhas de codigo iguais, o tal chamado overloading né?

P

Um metodo constructor nunca tem retorno, isto é, um metodo constructor nunca pode ser assim:

public class serC
...

public int serC ()
<-
peczenyj

Não, não é redundancia de código.

Uma coisa é o construtor, executado quando vc cria uma instância do objeto, o outro é um metodo que altera o atributo interno ‘num’ a qualquer momento.

raphaf

Digamos que voce tenha a classe pessoa…

public Pessoa(String nome, String rg){ this.nome = nome; this.rg = rg; }

Um objeto pessoa so pode existir se voce fornecer nome e rg… ou seja são as regras que você determinou…São as regras de existência do seu objeto…

Espero ter ajudado…

diego2005

Paulo,

o Construtor não é um método, pois para ser método tem que ter um tipo de retorno, depois você procure isso em livros…

Quando você faz:

System.out.println(qualquerObjeto);

Imprimirá informações sobre aquele objeto. De onde vem essas informações?? Vem do método toString(), que TODA classe herda da classe Object, entendeu??

P

yep, entendi.
thanks.
um constructor cria uma instância do objeto? Instancia é um “exemplo” né?
Instancia de um objecto é exemplo de um objecto certo?

P

sim, entendi.
ok.
um constructor cria uma instancia do objecto? Instancia significa “exemplo” né? instancia do objecto é um exemplo do objecto certo?

Criado 16 de outubro de 2006
Ultima resposta 16 de out. de 2006
Respostas 18
Participantes 6