Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách ném exception từ static block trong Java?


Một static block là một tập hợp các câu lệnh, sẽ được thực thi bởi JVM trước khi thực thi phương thức main(). Tại thời điểm class loading, nếu chúng ta muốn thực hiện bất kỳ hoạt động nào, chúng ta phải định nghĩa hoạt động đó bên trong static block vì block này thực thi tại thời điểm class loading.

Ném exception từ Static Block

  • Một static block chỉ có thể ném RunTimeException, hoặc phải có try-catch block để bắt checked exception.
  • Một static block xảy ra khi một class được load bởi class loader. Code có thể ở dạng static block hoặc là lời gọi static method để khởi tạo static data member.
  • Trong cả hai trường hợp, checked exceptions không được compiler cho phép. Khi một unchecked exception xảy ra, nó được wrap bởi ExceptionInInitializerError, sau đó được ném trong ngữ cảnh của thread đã trigger class loading.
  • Việc cố ném checked exception từ static block cũng không thể. Chúng ta có thể có try-catch trong static block nơi checked exception có thể được ném từ try block nhưng phải giải quyết nó trong catch block. Chúng ta không thể truyền nó tiếp dùng từ khóa throw.

Ví dụ

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); 
    } 
}

Kết quả

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)