java.lang.NullPointerException é uma das exceções mais populares em java programação. Qualquer pessoa que trabalhe em java deve ter visto isso surgir do nada no programa standalone java, bem como no aplicativo web java.
java.lang.NullPointerException
NullPointerException é uma exceção de tempo de execução, então não precisamos capturá-la no programa. NullPointerException é gerado em um aplicativo quando estamos tentando fazer alguma operação em nulo onde um objeto é necessário. Algumas das razões comuns para NullPointerException em programas java são:
- Invocar um método em uma instância de objeto mas em tempo de execução o objeto é nulo.
- Acessar variáveis de uma instância de objeto que está nula em tempo de execução.
- Lançando nulo no programa
- Acessar índice ou modificar valor de um índice de um array que está nulo
- Verificar o comprimento de um array que está nulo em tempo de execução.
Exemplos de Java NullPointerException
Vamos analisar alguns exemplos de NullPointerException em programas Java.
1. NullPointerException ao chamar um método de instância
Ao executarmos o programa acima, ele lança a seguinte mensagem de erro NullPointerException.
Estamos obtendo NullPointerException na instrução t.foo("Hi");
porque “t” é nulo aqui.
2. Java NullPointerException ao acessar/modificar o campo de um objeto nulo
O programa acima gera o seguinte rastreamento de pilha NullPointerException.
NullPointerException está sendo lançada na instrução int i = t.x;
porque “t” é nulo aqui.
3. Java NullPointerException quando null é passado como argumento de método
Este é um dos casos mais comuns de java.lang.NullPointerException
porque é o chamador quem está passando o argumento nulo.
A imagem abaixo mostra a exceção de ponteiro nulo quando o programa acima é executado no Eclipse IDE.
4. java.lang.NullPointerException quando null é lançado
Abaixo está a rastreabilidade de exceção do programa acima, mostrando NullPointerException devido à instrução throw null;
.
5. NullPointerException ao obter o comprimento de uma matriz nula
6. NullPointerException ao acessar o valor do índice de uma matriz nula
7. NullPointerException ao sincronizar em um objeto nulo
O synchronized(mutex)
lançará NullPointerException porque o objeto “mutex” é nulo.
8. Status HTTP 500 java.lang.NullPointerException
Às vezes, obtemos uma resposta de página de erro de uma aplicação web Java com uma mensagem de erro como “Status HTTP 500 – Erro interno do servidor” e causa raiz como java.lang.NullPointerException
.
Para isso, editei o projeto Exemplo Spring MVC e alterei o método HomeController conforme abaixo.
A imagem abaixo mostra a mensagem de erro lançada pela resposta da aplicação web.
Aqui está o rastreamento de pilha de exceção:
A causa raiz é NullPointerException na declaração user.getUserId().toLowerCase()
porque user.getUserId()
está retornando nulo.
Como detectar java.lang.NullPointerException
Detectar NullPointerException é muito fácil, basta olhar para o rastreamento da exceção e ele mostrará o nome da classe e o número da linha da exceção. Em seguida, examine o código e veja o que poderia ser nulo causando a NullPointerException. Basta olhar todos os exemplos acima, é muito claro a partir do rastreamento de pilha o que está causando a exceção de ponteiro nulo.
Como corrigir NullPointerException
java.lang.NullPointerException é uma exceção não verificada, então não precisamos capturá-la. As exceções de ponteiro nulo podem ser prevenidas usando verificações nulas e técnicas de codificação preventiva. Veja abaixo exemplos de código que mostram como evitar java.lang.NullPointerException.
Práticas recomendadas de codificação para evitar NullPointerException
1. Vamos considerar a função abaixo e procurar por cenários que possam causar uma exceção de ponteiro nulo.
A NullPointerException pode ocorrer se o argumento estiver sendo passado como nulo. O mesmo método pode ser escrito da seguinte forma para evitar NullPointerException.
2. Também podemos adicionar uma verificação nula para o argumento e lançar IllegalArgumentException se necessário.
3. Podemos usar o operador ternário como mostrado no código de exemplo abaixo.
4. Use String.valueOf() em vez do método toString(). Por exemplo, verifique que o código do método println() da classe PrintStream está definido como abaixo.
O trecho de código abaixo mostra o exemplo em que o método valueOf() é usado em vez de toString().
5. Escreva métodos que retornem objetos vazios em vez de nulo sempre que possível, por exemplo, lista vazia, string vazia, etc.
6. Existem alguns métodos definidos em classes de coleção para evitar NullPointerException, você deve usá-los. Por exemplo, contains(), containsKey() e containsValue().
Referência: Documento de API
Source:
https://www.digitalocean.com/community/tutorials/java-lang-nullpointerexception