Em linhas gerais, o NullPointerException é uma exceção lançada pelo Java quando um programa tenta acessar um objeto de memória que não foi instanciado (ou melhor, inicializado) até o momento de sua chamada. O que isso quer dizer? O objeto ainda está nulo, ele não tem um valor definido.

Causas para geração da exceção

Este tipo de exceção é detectado quando o programa tenta, em tempo de execução, realizar algo do tipo:

  • Acessar métodos de objetos que estão nulos.
  • Alterar ou visualizar atributos de objetos nulos.
  • Verificação de tamanho (length) de um array ainda nulo
  • Modificação de campos de um array nulo
  • Lançar uma exceção como se ela fosse throwable (“lançável”).

Erros comuns cometidos por iniciantes

Um erro comum é pensar que atribuir o inteiro 0 (zero) para uma variável é interpretado como nulo, o que não é verdade, pois 0 é um valor e sendo um valor ele estará sendo interpretado como tal. Um inteiro será realmente vazio quando ele não receber nenhum valor e neste caso será alocado um “pedaço” de memória que não conterá nada, será então, null.

Em java, tudo é na forma de classe. Desta forma, se você pretende usar qualquer de seus objetos, você sempre terá que executar duas coisas importantes.

A primeira delas é a declaração de suas variáveis e a segunda é a inicialização delas! Basicamente:

Declaração de variável: int a, int idade, float valor;

Com arrays é a mesma coisa.

Declaração: Produto p[] = new Produto[5];
Inicialização: p[0] = new Produto();

Um exemplo em código:

public static void main(String[] args) {
   String nomeCompleto;
   System.out.print(nomeCompleto);
}

Listagem 1: método de inicialização com a declaração de uma variável

Neste exemplo, temos uma variável “nomeCompleto” que está sendo declarada, mas.. onde está sendo feita a inicialização?

Eis um caso em que teremos a nossa boa e velha mensagem de NullPointerException.

Dica: Tentem sempre criar validações antes de usar os métodos.

Exemplo do caso acima:

public static void main(String[] args) {
   String nomeCompleto;

   If(nomeCompleto != null){
System.out.print(nomeCompleto);
   }else{
      System.out.print(“Erro ao apresentar o nome”);
   }   
}

Listagem 2: Validando se o nome está nulo.

Links Úteis