logo

Java의 연쇄 예외

Java의 연쇄 예외를 사용하면 하나의 예외를 다른 예외와 연결할 수 있습니다. 즉, 하나의 예외가 다른 예외의 원인을 설명합니다.

  • 예를 들어, 메소드가 산술 예외 0으로 나누려고 했기 때문입니다.
  • 그러나 오류의 근본 원인은 제수를 0으로 만드는 I/O 오류였습니다.
  • 이러한 경우 연결된 예외는 오류의 기본 원인과 기본 원인을 모두 전파하는 데 도움이 됩니다.

: 다음 예제에서는 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());  }  } } 

산출
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception 

메모: 중첩 예외라고도 알려진 연쇄 예외를 사용하면 Java의 예외와 원인을 연결할 수 있습니다. 이는 예외의 원래 원인에 대한 정보를 전파하려는 경우에 유용합니다.



생성자

  • Throwable(던지는 ​​원인) : 원인은 현재 예외를 발생시키는 예외입니다.
  • Throwable(String msg Throwable 원인) : msg는 예외 메시지이고 cause는 현재 예외를 발생시키는 예외입니다.

Throwable이 연결된 예외를 지원하는 방법

  1. getCause() : 이 메서드는 예외의 실제 원인을 반환합니다.
  2. initCause(발생 가능한 원인) : 이 메서드는 호출 예외의 원인을 설정합니다.

예: 연결된 예외와 함께 사용자 정의 메시지 사용

Java에서는 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);  }  } } 

산출:

안드로이드에서 차단된 번호 찾기
산출' title=

설명: 이 예에서는 정수 배열이며 제수를 0으로 설정합니다.

  • try 블록 내에서는 배열의 각 요소를 0으로 나누어 ArithmeticException을 발생시키려고 합니다.
  • 이 ArithmeticException은 원래 예외, 즉 ArithmeticException을 원인으로 사용하여 새 RuntimeException이 생성되는 catch 블록에서 발견됩니다.
  • RuntimeException 및 ArithmeticException을 포함한 스택 추적을 표시하는 RuntimeException이 포착되지 않기 때문입니다.

연쇄 예외의 장점:

연결된 예외의 장점은 다음과 같습니다.

  • 이 예외는 기본 원인과 근본 원인에 대한 세부 정보를 제공하여 디버깅에 도움이 됩니다.
  • 완전한 예외 컨텍스트 전파를 활성화하여 오류 처리를 단순화합니다.
  • 이를 통해 복잡한 애플리케이션의 오류 추적성이 향상됩니다.

연쇄 예외의 단점:

  • 제대로 사용하지 않으면 스택 추적이 길어지고 읽기가 어려워질 수 있습니다.
  • 과도하게 사용하면 예외가 불필요하게 연결되면 혼란스러운 오류 메시지가 발생할 수 있습니다.
  • 개발자는 의미 있는 원인이 연결되어 있는지 확인해야 합니다. 그렇지 않으면 디버깅 중에 오해를 불러일으킬 수 있습니다.