Exceções encadeadas em Java

Exceções encadeadas em Java

Exceções encadeadas em Java permitem associar uma exceção a outra, ou seja, uma exceção descreve a causa de outra exceção.

  • Por exemplo, considere uma situação em que um método lança um Exceção Aritmética por causa de uma tentativa de dividir por zero.
  • Mas a causa raiz do erro foi uma falha de E/S que fez com que o divisor fosse zero.
  • Nesses casos, as exceções encadeadas ajudam a propagar as causas primárias e subjacentes do erro.

Exemplo : o exemplo a seguir demonstra como usar exceções encadeadas em Java.

Java
   // Working of chained exceptions   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {      try     {          // Creating an exception      NumberFormatException     ex     =     new     NumberFormatException  (  'Primary Exception'  );      // Setting the cause of the exception      ex  .  initCause  (  new     NullPointerException  (  'Root cause of the exception'  ));      // Throwing the exception with a cause      throw     ex  ;      }         catch     (  NumberFormatException     ex  )     {          // Displaying the primary exception      System  .  out  .  println  (  'Caught Exception: '     +     ex  );      // Displaying the root cause of the exception      System  .  out  .  println  (  'Cause of Exception: '     +     ex  .  getCause  ());      }      }   }   

Saída
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception  

Observação: Exceções encadeadas, também conhecidas como exceções aninhadas, nos permitem associar uma causa a uma exceção em Java. Isto é útil quando queremos propagar informações sobre a causa original de uma exceção.

Construtores

  • Arremessável(causa lançável) : onde causa é a exceção que causa a exceção atual.
  • Throwable(String msg Causa que pode ser lançada) : onde msg é a mensagem de exceção e causa é a exceção que causa a exceção atual.

Métodos de exceções encadeadas de suporte lançáveis

  1. getCausa() : Este método retorna a causa real de uma exceção.
  2. initCause(causa lançável) : este método define a causa da exceção de chamada.

Exemplo: Usando uma mensagem personalizada com exceções encadeadas

Em Java podemos encadear exceções usando o construtor da classe Throwable.

Java
   // Use a custom message with chained exception   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {      try     {          // Code that might throw an exception      int  []     n     =     new     int  [  5  ]  ;      int     divisor     =     0  ;      for     (  int     i     =     0  ;     i      <     n  .  length  ;     i  ++  )     {      int     res     =     n  [  i  ]     /     divisor  ;      System  .  out  .  println  (  res  );      }      }         catch     (  ArithmeticException     e  )     {          // Creating a new exception with       // the original as the cause      throw     new     RuntimeException      (  'Error: Division by zero occurred'       e  );      }      }   }   

Saída:

Saída

Explicação: Neste exemplo, uma matriz de inteiros e define o divisor como 0.

  • Dentro do bloco try, ele tenta dividir cada elemento do array por 0, o que gera uma ArithmeticException.
  • Esta ArithmeticException é capturada no bloco catch onde uma nova RuntimeException é criada com a exceção original, ou seja, ArithmeticException como sua causa.
  • Como o RuntimeException não é capturado, o que exibe o rastreamento de pilha, incluindo o RuntimeException e o ArithmeticException.

Vantagens das exceções encadeadas:

As vantagens das exceções encadeadas estão listadas abaixo:

  • Esta exceção ajuda na depuração, fornecendo detalhes sobre as causas primárias e raiz.
  • Ele simplifica o tratamento de erros, permitindo a propagação do contexto de exceção completo.
  • Isso melhora a rastreabilidade de erros em aplicações complexas.

Desvantagens das exceções encadeadas:

  • Se não for usado corretamente, pode tornar o rastreamento de pilha mais longo e mais difícil de ler.
  • O uso excessivo pode causar mensagens de erro confusas se as exceções forem encadeadas desnecessariamente.
  • Os desenvolvedores devem garantir que causas significativas estejam vinculadas; caso contrário, pode enganar durante a depuração.
Questionário sugerido Editar questionário 3 perguntas

Qual é o objetivo principal das exceções encadeadas em Java?

  • UM

    Para ocultar a causa raiz de uma exceção

  • B

    Para associar uma exceção a outra

  • C

    Para melhorar o desempenho do código

  • D

    Para corrigir automaticamente erros de tempo de execução

Explicação:

As exceções encadeadas permitem vincular uma exceção a outra para mostrar a causa raiz.

Qual método é usado para definir a causa de uma exceção?

  • UM

    getMessage()

  • B

    setException()

  • C

    initCausa()

  • D

    initCausa()

Explicação:

O método initCause() define a causa subjacente de uma exceção.

No exemplo, que tipo de exceção é definida como causa de NumberFormatException?

  • UM

    IOException

  • B

    Exceção Aritmética

  • C

    NullPointerException

  • D

    RuntimeException

Explicação:

O exemplo define um NullPointerException como a causa do NumberFormatException.

Exceções encadeadas em JavaQuestionário concluído com sucesso Sua pontuação:   2 /3 Precisão :  0% Faça login para ver a explicação 1 /3 1 /3 < Previous Próximo >