Java에서 다중 예외 발생

Mohd Ebad Naqvi 2023년10월12일
Java에서 다중 예외 발생

이 자습서는 Java에서 여러 예외를 throw하는 방법을 보여줍니다.

예외는 프로그램 실행 중에 명령의 정상적인 흐름을 방해하는 원치 않는 예기치 않은 이벤트입니다. 모든 Java 예외의 루트 클래스는 java.lang.Throwable입니다. 이 클래스는 Error 및 예외 하위 클래스에 의해 상속됩니다.

예외를 처리하기 위해 try...catch 블록을 사용합니다.

try 블록에 예외가 발생할 수 있는 코드를 배치합니다. try 블록은 단독으로 사용되지 않습니다. 항상 catch 또는 finally가 뒤에 와야 합니다. catch 블록은 예외를 잡는 데 사용됩니다. 이 블록 다음에 finally 블록이 올 수 있습니다. finally 블록은 예외가 있든 없든 프로그램의 중요한 코드를 실행하는 데 사용됩니다.

Java에서는 여러 예외를 처리해야 할 수 있습니다. Java에서는 수많은 예외를 적용할 수 없습니다. 여러 예외를 지정할 수 있지만 그 중 하나만 발생합니다.

그러나 여러 예외 발생을 시뮬레이션하는 데 사용할 수 있는 몇 가지 대안이 있습니다.

여러 예외를 처리하기 위해 연결 예외를 사용할 수 있습니다. 이러한 예외는 발생한 예외가 다른 예외로 인해 발생했음을 나타냅니다.

예를 들어,

public class Main {
  public static void main(String[] args) {
    try {
      NumberFormatException ex = new NumberFormatException("NumberFormatException is thrown");
      ex.initCause(new NullPointerException("NullPointerException is the main cause"));
      throw ex;
    }

    catch (NumberFormatException ex) {
      System.out.println(ex);
      System.out.println(ex.getCause());
    }
  }
}

출력:

java.lang.NumberFormatException: NumberFormatException is raised
java.lang.NullPointerException: NullPointerException is the main cause

initCause()getCause() 메소드의 사용에 유의하십시오. initCause() 함수는 예외의 원인을 다른 예외로 설정하고 getCause()는 예외의 원인을 반환합니다. 이 경우에는 NullPointerException입니다.

억제된 예외를 사용할 수도 있습니다. 여기에서 기본 예외에 억제된 예외를 첨부합니다. Java 7에 추가되었습니다.

억제된 예외를 첨부하기 위해 addSuppressed() 함수를 사용합니다. 우리는 이 함수를 메인 예외 객체와 함께 사용합니다.

예를 들어,

import java.io.*;
class Main {
  public static void main(String[] args) throws Exception {
    try {
      Exception suppressed = new NumberFormatException();
      Exception suppressed2 = new NullPointerException();

      final Exception exe = new Exception();

      exe.addSuppressed(suppressed);
      exe.addSuppressed(suppressed2);
      throw exe;

    }

    catch (Throwable e) {
      Throwable[] suppExe = e.getSuppressed();
      System.out.println("Suppressed:");
      for (int i = 0; i < suppExe.length; i++) {
        System.out.println(suppExe[i]);
      }
    }
  }
}

출력:

Suppressed:
java.lang.NumberFormatException
java.lang.NullPointerException

위의 예에서 우리는 두 개의 예외를 주 객체에 첨부하고 억제된 예외를 출력했습니다. 모든 억제된 예외를 얻으려면 getSuppressed() 함수를 사용합니다.

관련 문장 - Java Exception