As exceções personalizadas são essenciais para um tratamento de erro mais significativo e específico em um programa Java. Criar suas próprias exceções permite capturar condições de erro que são exclusivas do seu domínio de aplicação, garantindo uma maneira mais clara de comunicar problemas específicos.
Quando Criar uma Exceção Personalizada?
A criação de exceções personalizadas é recomendada quando as exceções padrão de Java (como IllegalArgumentException
ou NullPointerException
) não cobrem adequadamente a lógica de erro que você quer manipular. Por exemplo, ao desenvolver um sistema bancário, você pode querer lançar uma exceção SaldoInsuficienteException
para indicar quando um cliente tenta realizar uma transação com saldo insuficiente.
Criando uma Exceção Personalizada
Para criar uma exceção personalizada, basta criar uma nova classe que herde de Exception
(se for uma exceção verificada) ou de RuntimeException
(para exceções não verificadas). O exemplo a seguir mostra uma exceção personalizada chamada SaldoInsuficienteException
.
public class SaldoInsuficienteException extends Exception {
public SaldoInsuficienteException(String mensagem) {
super(mensagem);
}
}
Exemplo de Uso de Exceção Personalizada
Vamos agora criar um exemplo de aplicação em que a exceção SaldoInsuficienteException
é lançada caso o usuário tente sacar mais do que o saldo disponível em conta.
public class ContaBancaria {
private double saldo;
public ContaBancaria(double saldoInicial) {
this.saldo = saldoInicial;
}
public void sacar(double valor) throws SaldoInsuficienteException {
if (valor > saldo) {
throw new SaldoInsuficienteException("Saldo insuficiente para realizar o saque.");
}
saldo -= valor;
System.out.println("Saque realizado com sucesso. Saldo atual: " + saldo);
}
public static void main(String[] args) {
ContaBancaria conta = new ContaBancaria(500);
try {
conta.sacar(600);
} catch (SaldoInsuficienteException e) {
System.out.println("Erro: " + e.getMessage());
}
}
}
Explicação do Exemplo
- Definindo o Construtor: A classe
SaldoInsuficienteException
recebe uma mensagem de erro no construtor e a passa para a classe pai (Exception
), permitindo que a mensagem seja exibida ao capturar a exceção. - Lançando a Exceção: No método
sacar
, a exceçãoSaldoInsuficienteException
é lançada quando o valor do saque excede o saldo da conta. - Capturando a Exceção: No
main
, o métodosacar
é chamado dentro de um blocotry-catch
. Caso a exceção seja lançada, a mensagem de erro é capturada e exibida ao usuário.
Exceções Personalizadas Verificadas vs. Não Verificadas
Exceções Verificadas (Checked): Herde de Exception
para forçar o uso de try-catch
ou throws
. São indicadas para erros que o programa não pode contornar sozinho e deve obrigatoriamente tratar.
public class IdadeInvalidaException extends Exception { }
Exceções Não Verificadas (Unchecked): Herde de RuntimeException
. São utilizadas para erros que, na maioria das vezes, indicam falhas de lógica de programação e não obrigam o uso de blocos try-catch
.
public class IdadeInvalidaRuntimeException extends RuntimeException { }
Conclusão
Exceções personalizadas tornam o código mais legível e o tratamento de erros mais específico, facilitando a identificação e a resolução de problemas únicos do seu domínio de aplicação.
Deixe um comentário