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
- getCausa() : Este método retorna a causa real de uma exceção.
- 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:
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.
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
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()
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
O exemplo define um NullPointerException como a causa do NumberFormatException.
Questioná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 >