Java/Exceções/Exceptions
Java⏱ ~2 min de leitura

Exceptions

try, catch, finally e hierarquia de erros

Exceções em Java são eventos que interrompem o fluxo normal de execução. O mecanismo try/catch/finally permite capturá-las e tratá-las de forma estruturada. O bloco try executa o código arriscado, catch captura tipos específicos de exceção, e finally sempre executa — seja com exceção ou sem.

Exceções se dividem em dois grupos: Checked exceptions (herdam de Exception diretamente, como IOException e SQLException) forçam o programador a tratar ou declarar com throws — o compilador verifica. Unchecked exceptions (herdam de RuntimeException, como NullPointerException e IndexOutOfBoundsException) são opcionais de tratar.

Crie exceções personalizadas estendendo Exception (checked) ou RuntimeException (unchecked). O Java 7 trouxe try-with-resources que fecha automaticamente qualquer objeto AutoCloseable ao sair do bloco.

Exemplo.java
// ── Exceção customizada ───────────────────────────
public class SaldoInsuficienteException extends RuntimeException {
    public SaldoInsuficienteException(double saldo, double valor) {
        super(String.format(
            "Saldo %.2f insuficiente para operação de %.2f",
            saldo, valor));
    }
}

// ── Try-with-resources (Java 7+) ─────────────────
try (BufferedReader br = new BufferedReader(
        new FileReader("dados.txt"))) {
    String linha;
    while ((linha = br.readLine()) != null) {
        System.out.println(linha);
    }
} catch (FileNotFoundException e) {
    System.err.println("Arquivo não encontrado: " + e.getMessage());
} catch (IOException e) {
    System.err.println("Erro de leitura: " + e.getMessage());
}
// br.close() é chamado automaticamente!

// ── Lançando exceções manualmente ─────────────────
public void sacar(double valor) {
    if (valor <= 0) throw new IllegalArgumentException("Valor deve ser positivo");
    if (valor > saldo) throw new SaldoInsuficienteException(saldo, valor);
    saldo -= valor;
}
💡 Dica pro

Nunca capture Exception ou Throwable genérico sem re-lançar. Capture apenas o tipo específico que você sabe tratar. Logar e engolir exceções silenciosamente é um dos piores antipatterns.

Recompensa+40 XP+exercícios