O que são exceções verificadas (checked exceptions) e não verificadas (unchecked exceptions)?
As exceções em Java são classificadas em verificadas (checked) e não verificadas (unchecked), determinando se precisam ou não ser tratadas obrigatoriamente pelo desenvolvedor.
1. Exceções Verificadas (Checked Exceptions
)
As exceções verificadas devem ser tratadas pelo código, ou seja, o compilador exige que o desenvolvedor use try-catch
ou throws
. Elas geralmente representam erros que podem ser previstos e recuperáveis, como problemas de I/O (entrada e saída de dados).
Exemplo: IOException
(Erro ao Acessar um Arquivo)
import java.io.*;
public class ExemploChecked {
public static void main(String[] args) {
try {
FileReader arquivo = new FileReader("arquivo.txt");
} catch (IOException e) {
System.out.println("Erro ao acessar o arquivo: " + e.getMessage());
}
}
}
O código acima tenta abrir um arquivo, mas pode falhar se ele não existir. O Java obriga que a
IOException
seja tratada, pois é uma exceção verificada.
2. Exceções Não Verificadas (Unchecked Exceptions
)
As exceções não verificadas não são obrigatoriamente tratadas pelo compilador. Elas representam erros de lógica ou problemas inesperados, normalmente causados por falhas do programador.
Exemplo: NullPointerException
public class ExemploUnchecked {
public static void main(String[] args) {
String texto = null;
System.out.println(texto.length()); // Gera NullPointerException
}
}
A
NullPointerException
ocorre porque tentamos acessar um método (length()
) de um objeto nulo. Como é uma exceção não verificada, o compilador não exige que seja tratada.
3. Diferença entre Checked e Unchecked
Característica | Checked Exception | Unchecked Exception |
---|---|---|
Precisa ser tratada? | Sim, obrigatório (try-catch ou throws ) |
Não obrigatório |
Exemplo | IOException , SQLException |
NullPointerException , ArrayIndexOutOfBoundsException |
Ocorre em... | Erros externos e previsíveis | Erros de lógica do programador |
Conclusão
As exceções verificadas são úteis para situações que podem ser previstas e tratadas, como erros ao abrir arquivos ou acessar banco de dados. Já as exceções não verificadas indicam falhas inesperadas no código, que devem ser corrigidas evitando os erros em vez de apenas tratá-los.
Quando utilizar exceções verificadas e não verificadas no desenvolvimento em Java?
Entender a diferença entre exceções verificadas e não verificadas ajuda a escrever código mais seguro e confiável. Por exemplo, ao trabalhar com APIs externas, tratamos exceções verificadas, pois podem ocorrer falhas de conexão. Já em código interno, evitamos exceções não verificadas garantindo validações antes de acessar objetos nulos ou índices inexistentes em arrays.
Algumas aplicações:
- Tratamento de erros ao acessar arquivos e banco de dados
- Prevenção de falhas ao validar entradas de usuário
- Garantia de estabilidade em sistemas críticos
- Evitar falhas inesperadas no fluxo do programa
Dicas para quem está começando
- Use exceções verificadas para erros externos (como arquivos e banco de dados)
- Evite exceções não verificadas validando dados corretamente
- Não capture exceções genéricas como
Exception
, trate erros específicos - Utilize logs para registrar exceções e facilitar depuração
- Prefira corrigir a causa da exceção em vez de apenas capturá-la
Contribuições de Rodrigo Farias