Duvida objeto

5 respostas
bruno_r_santana

no código abaixo a variavel de instancia bruno está recebendo o valor guardado na variavel brs??? é isso mesmo? se não for me expliquem o que se passa nesse código.


class obj

{

int brs = 10;

static obj bruno = new obj();

public static void main(String args[])

{

System.out.println(bruno.brs);

}

}

outra dúvida: qd uso no código abaixo o

System.out.println(bruno);

é exibido o endereço de memória do meu objeto, e se eu quiser ver qual o valor do objeto??o que o objeto representa, como faço?

5 Respostas

thiago.correa

Não, você está acessando o atributo brs do teu objeto bruno.

Quando você usa System.out.println(bruno); esse método procura pelo método toString(), quando a classe não o possui é impresso a referência para o endereço de memória do objeto, agora se você colocar o seguinte méltodo na sua classe obj

public String toStirng() {
    return "" + brs;
}

e usar o de novo o método println, passando o objeto bruno (ex: System.out.println(bruno):wink: )irá ser impreso valor de brs.

bruno_r_santana

tenho que converter o valor do meu objeto em uma string para poder exibi-lo?? é isso. não entendi como se usa o método toString para mostrar o valor do meu objeto.

ViniGodoy

Quando você executar o código, a primeira coisa que a JVM vai fazer é carregar sua classe.

Depois disso, ela inicializará todas as variáveis static. Nesse caso, ela vai inicializar a variável bruno, criando uma instância dela.

Quando ele inicializar bruno, a variável brs será inicializada e, em seguida, o construtor da classe bruno (que nesse caso é o default).

Finalmente, depois de tudo isso, o método main será executado. Assim, o comando

System.out.println(bruno.brs);

irá exibir o valor 10.

ViniGodoy

Quanto ao toString(). Por default ele te retorna o nome de sua classe, seguido de @ e o hashCode da classe em hexadecimal. O hashcode não necessariamente tem a ver com o endereço de memória.

O toString() serve para você colocar uma representação textual da sua classe. Isso é util se você quiser fazer

System.out.println(bruno);

Note que eu mandei imprimir bruno direto, não bruno.brs.

Por exemplo, vamos supor o seguinte:
public class Pessoa {
   private String nome;
   private String sobrenome;

   public pessoa(String umNome, String umSobrenome) {
      nome = umNome;
      sobrenome = umSobrenome;
   }
   public String getNome() { return nome; }
   public String getSobrenome() { return sobrenome; }

   @Override
   public String toString() {
         return nome + " " + sobrenome;
   }
}

O código abaixo iria imprimir "Bruno R. Santana":

Pessoa bruno = new Pessoa("Bruno", "R. Santana");
System.out.println(bruno);

Uma dica, para mais detalhes, dê uma lida no capítulo 3, item 9, do livro Effective Java. Você pode ler o capítulo no próprio site do livro:

http://java.sun.com/docs/books/effective/chapters.html

LPJava

NAO, bruno nao está guardando nao apenas referenciado a variavel brs, ou seja apontando… vc está acessando brs… vc pode ter na linha seguinte bruno (seu objeto), chamando um metodo e acessando o valor dentro desse metodo exemplo: bruno.add(8) nesse exemplo estou chamando o metodo add e passando por argumento o valor inteiro 8.

Criado 2 de janeiro de 2007
Ultima resposta 2 de jan. de 2007
Respostas 5
Participantes 4