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
PublicPessoateste;
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.
Pessoateste=newPessoa();
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
mokuro
hum, entao no
Pessoateste;
não há objetos, apenas acessarei a classe pessoa atravez de uma variavel
e no
Pessoateste=newPessoa();
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
Pessoateste;
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
Pessoateste;
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…
Publicpessoateste;
Isso aqui não é nada… Public não é um modificador de acesso… deve ser public (tudo minúsculo)
Pessoateste=newPessoa();
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
SrFabio
Quando tu fazes:
Pessoateste;
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
vo aproveita o topico pra uma duvida parecida, ae n preciso criar outro
Telateste=newTela();
newTela();
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
mokuro
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:
newTelaUsuario()
Só que aí perco a possibilidade de manipular os valores dessa tela…