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()
함수를 사용합니다.