Sobes.tech
Middle

Que tipo de exceção em Java é impossível de tratar?

sobes.tech IA

Resposta da IA

Erro.

Java divide as exceções (Throwable) em três tipos principais:

  1. Exceções verificadas: Requerem tratamento obrigatório ou declaração na assinatura do método (throws).
  2. Exceções não verificadas (Exceções em tempo de execução): Não requerem tratamento obrigatório. Geralmente indicam erros na lógica do programa.
  3. Erros: Representam problemas graves relacionados à máquina virtual Java ou recursos do sistema. Não podem ser tratados ao nível da aplicação, pois não são problemas do próprio código.

Exemplos de Error:

  • OutOfMemoryError: A máquina virtual Java não conseguiu alocar memória.
  • StackOverflowError: Ocorreu um estouro de pilha (recursão muito profunda).
  • InternalError: Erro interno da Máquina Virtual Java.

O tratamento de Error usando try-catch não faz sentido, pois esses erros indicam estados dos quais a aplicação geralmente não consegue se recuperar com sucesso. Em vez disso, quando ocorre um Error, a aplicação normalmente termina.

Embora tecnicamente seja possível escrever catch (Error e), tal código é considerado uma má prática e não resolve o problema principal.

try {
    // Código que pode causar OutOfMemoryError
    List<Object> list = new ArrayList<>();
    while (true) {
        list.add(new Object());
    }
} catch (OutOfMemoryError e) {
    // Este bloco será executado, mas você não poderá se recuperar,
    // pois o sistema não tem memória suficiente.
    System.err.println("Falta de memória! A aplicação provavelmente terminará.");
    // Ações posteriores aqui são inúteis ou causarão SecurityException
} catch (Exception e) {
    // Tratamento de outras exceções
    e.printStackTrace();
}

Na automação QA, se durante a execução de um teste ocorre um Error, isso indica mais um problema com o ambiente de teste, uma configuração incorreta do JVM ou um defeito grave na própria aplicação que levou a uma falha crítica, em vez de uma exceção gerenciável esperada. Esses cenários requerem investigação da causa raiz fora do código de teste.