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.

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

Exceções personalizadas são úteis para definir erros específicos em uma aplicação, tornando o código mais organizado e fácil de entender. Em Java, podemos criar uma nova classe de exceção herdando de Exception (para exceções verificadas) ou RuntimeException (para exceções não verificadas).

1. Criando uma Exceção Personalizada

Para criar uma exceção personalizada, basta estender Exception ou RuntimeException.

Exemplo de Exceção Personalizada Verificada (Checked Exception)

class SaldoInsuficienteException extends Exception {
    public SaldoInsuficienteException(String mensagem) {
        super(mensagem);
    }
}

Aqui, a classe SaldoInsuficienteException representa um erro ao tentar sacar dinheiro de uma conta bancária sem saldo suficiente.

2. Lançando e Capturando a Exceção Personalizada

class ContaBancaria {
    private double saldo;

    public void sacar(double valor) throws SaldoInsuficienteException {
        if (valor > saldo) {
            throw new SaldoInsuficienteException("Saldo insuficiente para saque de R$" + valor);
        }
        saldo -= valor;
    }
}

public class TesteExcecaoPersonalizada {
    public static void main(String[] args) {
        ContaBancaria conta = new ContaBancaria();

        try {
            conta.sacar(500);
        } catch (SaldoInsuficienteException e) {
            System.out.println("Erro: " + e.getMessage());
        }
    }
}

Explicação: O método sacar() verifica se há saldo suficiente antes de permitir a operação. Se não houver, ele lança a exceção personalizada, que é capturada no catch.

3. Criando uma Exceção Não Verificada (Unchecked Exception)

Se a exceção for causada por erro de lógica do programador, pode ser melhor herdar de RuntimeException.

class IdadeInvalidaException extends RuntimeException {
    public IdadeInvalidaException(String mensagem) {
        super(mensagem);
    }
}

Neste caso, o compilador não obriga o uso de try-catch para capturar essa exceção.

4. Quando Usar Exceções Personalizadas?

Tipo de Exceção Quando Usar
Checked Exception (extends Exception) Para erros previsíveis que devem ser tratados
Unchecked Exception (extends RuntimeException) Para erros de programação que podem ser evitados

Conclusão

Criar exceções personalizadas permite tratar erros específicos de forma organizada. O uso correto melhora a clareza do código, facilitando a manutenção e depuração. A escolha entre Exception e RuntimeException depende da necessidade de forçar o tratamento do erro ou não.

Exceções personalizadas são essenciais para aplicações robustas. Em um sistema de pagamentos, podemos criar exceções para tratar falhas como transações inválidas ou problemas de autenticação. Isso evita mensagens genéricas de erro e melhora a experiência do usuário, garantindo que os problemas sejam detectados e resolvidos com mais eficiência.

Algumas aplicações:

  • Melhora a legibilidade do código
  • Facilita a depuração e manutenção
  • Criação de regras específicas para a aplicação
  • Evita o uso de exceções genéricas

Dicas para quem está começando

  • Herde Exception para exceções verificadas e RuntimeException para não verificadas
  • Crie mensagens descritivas na exceção personalizada
  • Evite exceções genéricas como Exception, prefira exceções específicas
  • Use exceções personalizadas para regras de negócio importantes
  • Registre logs quando uma exceção for lançada para facilitar a depuração

Contribuições de Rodrigo Farias

Compartilhe este tutorial: Como criar minha própria exceção personalizada em Java

Compartilhe este tutorial

Continue aprendendo:

O que são exceções verificadas e não verificadas

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

Tutorial anterior

Qual a diferença entre throw e throws

Throw é usado para lançar exceções em tempo de execução, enquanto throws declara que um método pode gerar exceções.

Próximo tutorial