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이 연결된 예외를 지원하는 방법
- getCause() : 이 메서드는 예외의 실제 원인을 반환합니다.
- 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); } } }
산출:
안드로이드에서 차단된 번호 찾기
설명: 이 예에서는 정수 배열이며 제수를 0으로 설정합니다.
- try 블록 내에서는 배열의 각 요소를 0으로 나누어 ArithmeticException을 발생시키려고 합니다.
- 이 ArithmeticException은 원래 예외, 즉 ArithmeticException을 원인으로 사용하여 새 RuntimeException이 생성되는 catch 블록에서 발견됩니다.
- RuntimeException 및 ArithmeticException을 포함한 스택 추적을 표시하는 RuntimeException이 포착되지 않기 때문입니다.
연쇄 예외의 장점:
연결된 예외의 장점은 다음과 같습니다.
- 이 예외는 기본 원인과 근본 원인에 대한 세부 정보를 제공하여 디버깅에 도움이 됩니다.
- 완전한 예외 컨텍스트 전파를 활성화하여 오류 처리를 단순화합니다.
- 이를 통해 복잡한 애플리케이션의 오류 추적성이 향상됩니다.
연쇄 예외의 단점:
- 제대로 사용하지 않으면 스택 추적이 길어지고 읽기가 어려워질 수 있습니다.
- 과도하게 사용하면 예외가 불필요하게 연결되면 혼란스러운 오류 메시지가 발생할 수 있습니다.
- 개발자는 의미 있는 원인이 연결되어 있는지 확인해야 합니다. 그렇지 않으면 디버깅 중에 오해를 불러일으킬 수 있습니다.