Criando suas Próprias Classes de Exceção em Java
Embora a biblioteca padrão do Java ofereça diversas classes de exceção para lidar com a maioria das situações que podem ocorrer durante a execução de um programa, há casos em que é necessário criar uma exceção personalizada com lógica específica.
Para criar uma exceção personalizada, basta herdar de Exception
. Por exemplo, considere uma classe que calcula o fatorial de um número. Queremos lançar uma exceção específica se o número fornecido for menor que 1:
class Factorial {
public static int getFactorial(int num) throws FactorialException {
int result = 1;
if (num < 1) {
throw new FactorialException("The number is less than 1", num);
}
for (int i = 1; i <= num; i++) {
result *= i;
}
return result;
}
}
class FactorialException extends Exception {
private int number;
public int getNumber() {
return number;
}
public FactorialException(String message, int num) {
super(message);
number = num;
}
}
Nesse exemplo, o erro relacionado ao cálculo do fatorial é representado pela classe FactorialException
, que herda de Exception
e armazena informações relevantes sobre o problema.
O construtor de FactorialException
chama o construtor da superclasse Exception
para registrar a mensagem de erro super(message)
e mantém um campo adicional para guardar o número cujo fatorial foi solicitado.
A exceção é lançada no método getFactorial
usando o operador throw
:
throw new FactorialException("The number is less than 1", num);
Como ela não é tratada no próprio método, declaramos no cabeçalho que o método pode lançá-la usando throws
:
public static int getFactorial(int num) throws FactorialException
Para tratar essa exceção personalizada, usamos o bloco try..catch
como em qualquer outra exceção:
public static void main(String[] args) {
try {
int result = Factorial.getFactorial(6);
System.out.println(result);
}
catch (FactorialException ex) {
System.out.println(ex.getMessage());
System.out.println(ex.getNumber());
}
}
Resumo
- Exceções personalizadas são criadas herdando de
Exception
. - Elas podem ter campos e métodos próprios para armazenar informações adicionais sobre o erro.
- A mensagem de erro é passada para a superclasse com
super(message)
. - O lançamento é feito com
throw new MinhaExcecao(...)
. - Se não for tratada no método atual, deve ser declarada com
throws
no cabeçalho. - O tratamento é feito com
try..catch
, como em qualquer outra exceção.