Novo objeto

olá

me surgiu umas duvidas, bem básicas
é o seguinte
crio uma classe Pessoa, com alguns atributos e seus respectivos getters and setters

ae na outra classe
posso:

1- Pessoa teste;
2- Public pessoa teste;
3- Pessoa teste = new Pessoa();

gostaria de saber qual a diferença destes 3 e quando usá-los.
obrigado

Pessoa teste;

Aqui não há instânciação, há apenas a declaração de uma variável que irá receber uma instância da classe Pessoa

Public Pessoa teste;

Isto significa que a instância da classe Pessoa que será guardada na variável teste é publica, ou seja, é acessível a classes exteriores a esta.

Pessoa teste = new Pessoa(); 

Aqui estás a instânciar um objecto da classe Pessoa que vai ser guardado na variável teste.

Espero ter suprimido as tuas dúvidas, qualquer coisa que não entendeste posta que volto a explicar.

hum, entao no

Pessoa teste;

não há objetos, apenas acessarei a classe pessoa atravez de uma variavel

e no

Pessoa teste = new Pessoa();

terá o objeto

eh isso?
mas

das duas maneiras, eu consigo dar os set/getters e usar os metodos da classe, entao quando devo usar cada uma?

[quote=mokuro]hum, entao no

Pessoa teste;

não há objetos, apenas acessarei a classe pessoa atravez de uma variavel
[/quote]

Como foi dito, aqui existe um objeto Pessoa mas ele é nulo, este objeto está atribuido a variável teste

Se você tentar acessar teste.variavelDePessoa irá receber uma NullPointException

Aqui você está instanciando o objeto, ou seja, você está chamando o construtor de Pessoa sem argumentos, e atribuindo os valores default para as variáveis de instância

Por exemplo, se Pessoa tiver uma variável do tipo primitiva int quando você chamar o construtor - fazendo new Pessoa() - a variável será automaticamente inicializada com 0 integer

[quote=mokuro]
mas
das duas maneiras, eu consigo dar os set/getters e usar os metodos da classe, entao quando devo usar cada uma?[/quote]

Se você for acessar uma variável antes de chamar o construtor irá receber a excessão que falei acima

abs

Pessoa teste;

Variável do tipo Pessoa, mas sem um objeto… pode até usar os get() e set() da variável, mas na hora de executar vais receber uma NullPointerException… Me corrijam se eu estiver errado…

Public pessoa teste;

Isso aqui não é nada… Public não é um modificador de acesso… deve ser public (tudo minúsculo)

Pessoa teste = new Pessoa();

Aqui vc criou a variável do tipo pessoa e atribuiu a ele um novo Objeto Pessoa, nada de Exceptions e felicidades para a vida toda… rsrsrs

Abraços :wink:

Quando tu fazes:

Pessoa teste; 

Não podes usar métodos de instância nem acessar a variáveis de instância porque a variável não foi inicializada, não podes fazer rigorosamente nada com a variável sem lhe atribuires um conteúdo, que neste caso específico seria um objecto da classe Pessoa.

Respondendo á tua pergunta: Deves usar sempre a segunda. Podes usar a primeira também, mas antes de tentares acessar aos seus métodos e atributos deves inicializar a variável. Algo como isto

Exemplo:


Pessoa p;

//......

p = new Pessoa();

p.setName("Fábio");
p.setIdade("19");
p.getAltura();
//etc etc..

SrFabio
adriano_si
André Fonseca

vlw galera, agora entendi certinho.

vo aproveita o topico pra uma duvida parecida, ae n preciso criar outro

Tela teste = new Tela();
new Tela();

soh pra ter certeza do que eu estou fazendo

no primeiro caso, posso usar o objeto teste para mecher nos metodos de Tela
e no segundo apenas inicio Tela sem poder modificar os métodos

é isso mesmo?

Digamos que no segundo caso estás iniciando um objecto anónimo da classe Tela. E basicamente é isso, apesar de teres acesso aos “conteúdos” do objecto criado, não os vais conseguir manipular facilmente porque não tens nenhuma variável que o referencie.

blza

vlw a ajuda
\o/

só usa uma chamada a new AlgumObjeto() quando não precisares manipular esse objeto…

Por exemplo:

eu não manipulo minhas telas em tempo de execução… então no construtor faço assim…

public TelaUsuario() { setVisible(true); setLocation(250,80); initComponents(); montaTabela(); }

e quando preciso chamar essa tela faço assim:

new TelaUsuario()

Só que aí perco a possibilidade de manipular os valores dessa tela…

Espero ter ajudado :wink:

ajudou sim
vlw ae =]