Novo objeto

10 respostas
M

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

10 Respostas

SrFabio
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.

M

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?

Andre_Fonseca

mokuro:
hum, entao no

Pessoa teste;

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

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

mokuro:

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

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

abs

adriano_si
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:

SrFabio

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..
M

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?

SrFabio

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.

M

blza

vlw a ajuda
\o/

adriano_si

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:

M

ajudou sim
vlw ae =]

Criado 29 de setembro de 2008
Ultima resposta 29 de set. de 2008
Respostas 10
Participantes 4