DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

Item 77: Não ignore as exceções

Definição

  • Ignorar exceções, especialmente com blocos catch vazios, compromete o propósito das exceções, que é forçá-lo a lidar com condições excepcionais.
  • Comparação: Ignorar uma exceção é como ignorar um alarme de incêndio — pode ter consequências desastrosas.

Problemas de ignorar exceções

  • Falhas silenciosas:
  • O programa pode prosseguir sem alertar sobre erros, causando falhas arbitrárias posteriormente.
  • Dificuldade de depuração:
  • Sem tratamento ou registro da exceção, informações cruciais para identificar problemas podem ser perdidas.
  • Comportamento inesperado:
  • O código pode falhar em locais aparentemente sem relação com a origem do erro.

Exemplo de má prática
Um bloco catch vazio que ignora a exceção:

try {
    // Código que pode lançar uma exceção
} catch (Exception e) {
    // Exceção ignorada!
}

Enter fullscreen mode Exit fullscreen mode

Situações em que ignorar exceções pode ser aceitável

  • Exemplo: Fechar um recurso como um FileInputStream, quando o estado do arquivo não foi alterado.
  • Regras para ignorar exceções de forma apropriada:

Registre a exceção para análise posterior:

try {
    fileInputStream.close();
} catch (IOException e) {
    e.printStackTrace(); // Registro da exceção
}

Enter fullscreen mode Exit fullscreen mode

Adicione um comentário explicando por que a exceção está sendo ignorada:

try {
    fileInputStream.close();
} catch (IOException ignored) {
    // Ignorado porque o arquivo já foi lido com sucesso.
}

Enter fullscreen mode Exit fullscreen mode

Conselhos gerais
Trate a exceção sempre que possível:

Exemplo de tratamento:

try {
    // Operação crítica
} catch (IOException e) {
    System.err.println("Erro ao realizar a operação: " + e.getMessage());
    // Tomar medidas corretivas ou lançar uma exceção mais específica
}

Enter fullscreen mode Exit fullscreen mode

Deixe a exceção se propagar, se necessário:

  • Permitir que a exceção seja lançada pode preservar informações importantes para depuração.
public void processFile() throws IOException {
    // O chamador decidirá como tratar a exceção
    fileInputStream.close();
}

Enter fullscreen mode Exit fullscreen mode

Evite blocos catch genéricos:

Evite capturar todas as exceções indiscriminadamente, como catch (Exception e).

Resumo Final
Nunca ignore exceções sem um motivo claro.
Se ignorar for inevitável:
Explique o motivo com um comentário.
Registre a exceção para facilitar futuras investigações.
Tratar ou propagar exceções de maneira adequada pode evitar falhas silenciosas e facilitar a manutenção e a depuração do código.


Image description

Image description

Top comments (0)