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-resourcespara 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 |