Java의 ExceptionInInitializer 오류

Suraj P 2023년10월12일
  1. Java의 ExceptionInInitializerError에 대한 간략한 소개
  2. Java에서 ExceptionInInitializerError 처리
  3. 결론
Java의 ExceptionInInitializer 오류

이 기사에서는 Java의 ExceptionInInitializerError에 대해 알아봅니다.

Java의 ExceptionInInitializerError에 대한 간략한 소개

ExceptionInInitializerError는 Java에서 확인되지 않은 예외이며 Error 클래스의 자식입니다. 런타임 예외 범주에 속합니다.

Java에서 JVM(Java Virtual Machine)이 정적 이니셜라이저 블록을 평가하거나 정적 변수에 값을 인스턴스화하거나 할당하지 못할 때마다 ExceptionInInitializerError 예외가 발생합니다. 이는 정적 초기화 프로그램에서 문제가 발생했음을 나타냅니다.

정적 초기화 프로그램 내에서 이 예외가 발생할 때마다 Java는 ExceptionInInitializerError 클래스의 개체 내부에 예외를 래핑하여 근본 원인으로 실제 예외에 대한 참조를 유지합니다.

Java에서 ExceptionInInitializerError의 예

위의 논의를 바탕으로 ExceptionInInitializerError는 주요한 경우에 발생합니다. 더 잘 이해하기 위해 몇 가지 예를 살펴보겠습니다.

예 1: 정적 변수에 값을 할당하는 시나리오.

public class Test {
  static int x = 100 / 0;
  public static void main(String[] args) {
    System.out.println("Value of x is " + x);
  }
}

출력:

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException: / by zero
    at Test.<clinit>(Test.java:4)

위의 코드에서 정의되지 않은 산술 동작을 제공하는 정적 변수 x100/0 값을 할당했기 때문에 정적 변수에 값을 할당하는 동안 예외가 발생하여 결국 ExceptionInInitializerError가 발생합니다.

출력에서 실제 예외 ArithmeticExceptionExceptionInInitializerError 클래스의 인스턴스 내에서 래핑되는 것을 관찰할 수도 있습니다.

예 2: 정적 블록 내부에 null 값이 할당되는 시나리오.

public class Test {
  static {
    String str = null;
    System.out.println(str.length());
  }

  public static void main(String[] args) {}
}

출력:

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
    at Test.<clinit>(Test.java:7)

위의 코드에서 null 값이 있는 문자열 str이 있는 정적 블록을 만들었습니다. 따라서 length() 메서드를 사용하여 길이를 얻으려고 하면 null을 값으로 사용하여 문자열의 길이를 인쇄할 때 NullPointerException이 발생합니다.

그러나 이 예외는 정적 블록 내부에서 발생하므로 ExceptionInInitializerError 클래스 내부에 래핑되고 출력에 ExceptionInInitializerError가 표시됩니다.

Java에서 ExceptionInInitializerError 처리

Java의 ExceptionInInitializerError는 다음 사항을 확인하여 피할 수 있습니다.

  1. 프로그램에서 정적 변수를 초기화할 때 런타임 예외가 발생하지 않는지 확인하십시오.
  2. 프로그램의 정적 초기화 프로그램 블록이 런타임 예외를 발생시키지 않는지 확인하십시오.

결론

이 기사에서는 정적 변수를 초기화하거나 정적 블록을 평가하는 동안 일부 예외가 발생했음을 나타내는 Java의 ExceptionInInitializerError에 대해 배웠습니다. 이 오류는 기본 예외에 대한 런타임 래퍼로 작동하며 프로그래머가 기본 예외를 해결할 때까지 JVM을 중지합니다.

작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

관련 문장 - Java Error