Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java의 정적 블록에서 예외를 발생시키는 방법은 무엇입니까?

<시간/>

정적 블록 main() 메소드를 실행하기 전에 JVM에 의해 실행될 명령문 세트입니다. 어떤 활동을 수행하려면 클래스를 로드할 때 정적 블록 안에 해당 활동을 정의해야 합니다. 이 블록은 클래스 로드 시 실행되기 때문에 .

정적 블록에서 예외 발생

  • 정적 블록 RunTimeException만 발생시킬 수 있음 , 또는 확인된 예외를 catch하려면 try 및 catch 블록이 있어야 합니다.
  • 정적 차단 클래스 로더가 클래스를 로드할 때 발생합니다. 코드는 정적 블록 형태로 제공될 수 있습니다. 또는 정적 데이터 멤버를 초기화하기 위한 정적 메서드에 대한 호출로 사용됩니다.
  • 두 경우 모두 예외 확인 컴파일러에서 허용하지 않습니다. 확인되지 않은 예외인 경우 발생하면 ExceptionInInitializerError로 래핑됩니다. , 그런 다음 클래스 로드를 트리거한 스레드의 컨텍스트에서 throw됩니다.
  • 정적 블록에서 확인된 예외를 발생시키려고 합니다. 도 불가능합니다. 확인된 예외가 try 블록에서 throw될 수 있지만 catch 블록 내에서 해결해야 하는 정적 블록에서 try 및 catch 블록을 가질 수 있습니다. throw 키워드를 사용하여 더 이상 전파할 수 없습니다.

public class StaticBlockException {
   static int i, j;
   static {
      System.out.println("In the static block");
      try {
         i = 0;
         j = 10/i;
      } catch(Exception e){
         System.out.println("Exception while initializing" + e.getMessage());
         throw new RuntimeException(e.getMessage());
      }
   }
   public static void main(String args[]) {
      StaticBlockException sbe = new StaticBlockException();
      System.out.println("In the main() method");
      System.out.println("Value of i is : "+i);
      System.out.println("Value of j is : "+ j);
   }
}

출력

In the static block
Exception while initializing/ by zero
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: / by zero
        at StaticBlockException.(StaticBlockException.java:10)