Sobes.tech
Junior

Como lançar exceções corretamente em Java?

sobes.tech IA

Resposta da IA

As exceções devem ser lançadas quando ocorre uma situação anormal que interrompe a execução normal do programa e requer uma atenção imediata.

Princípios básicos:

  • Utilize exceções para comunicar erros, não para controlar o fluxo de execução.
  • Escolha o tipo de exceção mais adequado da biblioteca padrão.
  • Crie suas próprias classes de exceção quando as padrão não fornecerem informações suficientes.
  • Inclua na mensagem de exceção detalhes sobre a causa do erro, incluindo o contexto.
  • Não capture exceções que não possa tratar corretamente. É melhor propagá-las para cima na pilha de chamadas.
  • Use blocos try-with-resources para fechar recursos automaticamente.
  • Registre as exceções que você trata ou propaga para um nível superior.

Sintaxe correta: throw new MyException("Mensagem de erro");

Exemplo:

// Criação de uma exceção personalizada
public class InvalidParameterException extends Exception {
    public InvalidParameterException(String message) {
        super(message);
    }
}

// Método que lança uma exceção
public int divide(int a, int b) throws InvalidParameterException {
    if (b == 0) {
        throw new InvalidParameterException("Divisão por zero não permitida");
    }
    return a / b;
}

// Uso do método e tratamento da exceção
public void performDivision(int x, int y) {
    try {
        int result = divide(x, y);
        System.out.println("Resultado: " + result);
    } catch (InvalidParameterException e) {
        // Registro do erro
        System.err.println("Erro na divisão: " + e.getMessage());
        // Possível tratamento adicional ou propagação
    }
}

Diferenças entre exceções Checked e Unchecked:

Tipo de exceção Herda de Requer tratamento/declarção Exemplo
Checked Exception (exceto RuntimeException) Sim (try-catch ou throws) IOException, SQLException
Unchecked RuntimeException Não (o compilador não exige) NullPointerException, ArrayIndexOutOfBoundsException