Olá desenvolvedores, estão prontos para aprender a solucionar problemas com o NullPointerException? Se sim, vamos lá. Mas antes precisamos saber o porquê da ocorrência desta exceção. Este que é sem qualquer sombra de dúvida o “erro” mais comum na vida de um programador. Se você ainda não passou por um NPE, você não está fazendo isso direito.

Via de regra, um NullPointerException é lançado quando tentamos manipular um objeto nulo. Isto é, acessar seja uma propriedade, métodos ou atributos de um objeto, mas sem tê-lo instanciado. Sem que ele tenha sido criado. Em síntese, isso significa que este objeto está nulo, ou seja, não possui um valor definido.

Em “MODIFICADORES DE ACESSO: PUBLIC E PRIVATE”, como bônus falamos um pouco sobre este tipo de erro e demos um exemplo. Falamos, que esta é até considerada uma prática comum entre os desenvolvedores. Em outras palavras, inicializar com valor null um objeto que em dado momento não tem utilidade dentro de um projeto é uma prática cotidiana.

Aluno aluno01 = null;

O problema real acontece quando na execução do programa tentamos acessar este objeto. Objeto este que por não ter recebido nenhum valor é um espaço alocado na memória sem nada, é um espaço vazio. E quando esta exceção é lançada é exibida uma mensagem no console como mostra o exemplo abaixo.

Ainda entendendo mais sobre o NullPointerException ele estende a classe RuntimeException. Esta classe é responsável por disparar exceções em tempo de execução. Além disso, o NullPointerException é o que em Java é chamado de “exceção verificada – unchecked exception. Em termos simples, unchecked exception é a exceção que é verificada no momento da compilação. Razão pela qual o compilador não acusa erro em tempo de compilação.

CAUSAS DO NULLPOINTEREXCEPTION

É lugar comum a premissa de que para prevenir um erro, temos que saber porque ele acontece. Tal pensamento também é válido para buscar com rapidez a solução quando o erro já ocorreu.

Assim, dentro deste contexto saber quando uma exceção do tipo NullPointerException é lançada, nos permite codificar de uma forma a prevenir tais exceções. E mais, sabendo porque elas ocorrem você poderá ser rápido na busca pela solução.

TIPOS DE EXCEÇÃO

Dessa forma, este tipo de exceção é lançada quando o programa em tempo de execução tenta:

Acessar métodos de objetos que estão nulos:

Aluno aluno01 = null;
String nome = aluno01.getNome();

Acessar um campo de um objeto que esteja nulo.

Aluno aluno01 = null;
String nome = aluno01 nome;

Verificar o tamanho de um array que esteja nulo:

String[] disciplinas = null;
int tamanho = disciplinas.lenght;

Acessar um elemento de um array que tenha o valor nulo.

String[] disciplina = null;
String materia = disciplina[3];

Lançar uma exceção null como se ela fosse throwable (“lançável”).

Exception num = null;
throw num;

Estes são apenas alguns dos muitos exemplos de situações em que um erro de NullPointerException pode ocorrer. Isto é, quando uma exceção dessa natureza é lançada. Podemos listar ainda:

Quando tenta fazer uso de unboxing em um objeto que esteja com o valor nulo. Quando obviamente tenta lançar o NullPointerException diretamente. Quando tenta iterar null usando a sintaxe do for-each.

Como você pôde observar são inúmeros os casos em que uma exceção RuntimeException pode ser lançada. Assim, nosso objetivo aqui não é listar todas elas, mas incentivá-lo a pensar e a resolver problemas como um programador profissional. Em outras palavras, nosso objetivo é auxiliá-lo a desenvolver uma mentalidade de programador.

Todavia, quando uma mensagem de erro é exibida no console, ela acusa o tipo de erro ou exceção, a classe e a linha onde o erro se encontra. Mas atente-se, pode ser que você encontre a linha problemática acima da que foi indicada. De qualquer forma, você terá uma referência do que está ocorrendo e onde.

COMO SE PREVINIR DE UM NULLPOINTEREXCEPTION

Certamente existem algumas formas de prevenir esse tipo de exceção, ou pelo menos diminuir a frequência em que elas ocorrem. E uma bem simples é sempre declarando suas variáveis e as inicializando, não deixe para depois. A mesma orientação vale para os atributos, ao fazê-lo tão logo os crie garantirá que não seja atribuído a eles um valor nulo.

É uma prática comum entre desenvolvedores atribuir um valor nulo a um objeto quando este não tem utilidade dentro do projeto. Porém, eu diria que é uma boa prática não fazê-lo. Busque sempre uma forma de validar seus dados.

EM POUCAS PALAVRAS

Então é isso caros desenvolvedores, se você escolheu a programação como carreira, então o tempo todo lidando com erros e exceções. Você estará o tempo todo resolvendo quebra cabeças, literalmente.

A cada nível que você sobe na sua carreira de desenvolvedor os sistemas vão ficando cada vez mais complexos. E o mesmo acontecerá com os problemas que você encontrará pelo caminho. Busque sempre entender porque este ou aquele erro ocorre, porque esta ou aquela exceção é lançada.

E principalmente, olhe para a mensagem de erro exibida, leia e tente entender o que está acontecendo, para não sair as cegas. No mais, conte sempre comigo, conte sempre com a comunidade do JDev Treinamento.