Boa tarde a todos,
estou fazendo um trabalho de faculdade e estou com problemas em com o código que segue.
System.out.printf("Digite o dia do nascimento:\n");
pessoa.data.setDia(ler.nextInt());
segue a funcao setDia()
public void setDia(int dia) {
this.dia = dia;
}
quando chega nessa parte do codigo acontece um erro,[color=red] Exception in thread “main” java.lang.NullPointerException[/color].
Sou iniciante em java, e não consigo descobrir porque esta acontecendo este erro.
desde já obrigado.
instanciou o objeto Pessoa?
Pessoa pessoa = new Pessoa();
Pelo que entendi examinando a linha 2 pessoa.data.setDia(ler.nextInt());
Você criou duas classes: Pessoa e Data.
No entanto, você criou uma instância de Data dentro de Pessoa, ou seja, o objeto data passou a ser um atributo de pessoa.
Se isso estiver certo, verifique se dentro da classe Pessoa esse objeto da Classe Data está instanciado.
Exemplo:
Classe Data:
public void setDia(int dia) {//metodo para inserir dia
this.data = dia
}
Classe Pessoa:
Data data=new Data();//atributo deve estar instanciado para receber o pessoa.data.setDia(ler.nextInt());
Espero que isso o ajude.
O NullPointerException ocorre quando você tenta invocar um metodo ou um atributo de uma variavel de referencia que esteja apontando para null.
Por exemplo:
String a = null;
if(a.equals("")) {
//sei la o que acontece aqui
}
Aqui você estaria comparando um objeto nulo com uma String “”. Aqui ele vai lançar uma NullPointerException pois a variavel a esta apontando para null.
Se fosse assim:
String a = null;
if("".equals(a)) {
//use a sua criatividade
}
Estaria tudo bem porque “” não é nulo e ali voce esta invocando o metodo equals de equals de “” e não de a.
E mais uma coisa, NullPointerException é uma exceção e não um erro.
[quote=Jemerson]Pelo que entendi examinando a linha 2 pessoa.data.setDia(ler.nextInt());
Você criou duas classes: Pessoa e Data.
No entanto, você criou uma instância de Data dentro de Pessoa, ou seja, o objeto data passou a ser um atributo de pessoa.
Se isso estiver certo, verifique se dentro da classe Pessoa esse objeto da Classe Data está instanciado.
Exemplo:
Classe Data:
public void setDia(int dia) {//metodo para inserir dia
this.data = dia
}
Classe Pessoa:
Data data=new Data();//atributo deve estar instanciado para receber o pessoa.data.setDia(ler.nextInt());
Espero que isso o ajude.[/quote]
obrigado a todos pelas respostas,
erra exatamente este o problema, acabei nao instanciando o objeto Data corretamente, tinha colocado apenas:
public Data data;
quando deveria ter colocado
public Data data = new Data();
erro banal mas realmente nao me passou pela cabeca que poderia ser isso.