O que são exceções verificadas (checked exceptions) e não verificadas (unchecked exceptions)?

As exceções em Java podem ser verificadas ou não verificadas, determinando se precisam ser tratadas explicitamente pelo desenvolvedor.

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.

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

Compartilhe este tutorial: O que são exceções verificadas e não verificadas

Compartilhe este tutorial

Continue aprendendo:

Como funciona o tratamento de exceções em Java

O tratamento de exceções em Java permite lidar com erros inesperados durante a execução do programa, evitando falhas e melhorando a estabilidade do código.

Tutorial anterior

Como criar minha própria exceção personalizada em Java

Exceções personalizadas em Java permitem criar classes próprias de erro para tratar situações específicas no código, melhorando a clareza do tratamento de exceções.

Próximo tutorial