Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào để ném một ngoại lệ khỏi một khối tĩnh trong Java?

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

Ném một ngoại lệ khỏi Khối tĩnh

  • Một khối tĩnh chỉ có thể ném một RunTimeException hoặc phải có một khối try and catch để bắt một ngoại lệ đã chọn.
  • Một khối tĩnh xảy ra khi một lớp được tải bởi bộ tải lớp. Mã có thể ở dạng khối tĩnh hoặc như một lệnh gọi đến một phương thức tĩnh để khởi tạo một thành viên dữ liệu tĩnh.
  • Trong cả hai trường hợp, ngoại lệ đã chọn không được phép bởi trình biên dịch. Khi một ngoại lệ không được chọn xảy ra, nó được bao bọc bởi ExceptionInInitializerError , sau đó được đưa vào ngữ cảnh của chuỗi đã kích hoạt tải lớp.
  • Đang cố gắng đưa ra một ngoại lệ đã kiểm tra từ một khối tĩnh cũng không được. Chúng ta có thể có một khối thử và bắt trong một khối tĩnh nơi một ngoại lệ đã được kiểm tra có thể được ném ra từ khối thử nhưng chúng ta phải giải quyết nó trong khối bắt. Chúng tôi không thể tuyên truyền nó hơn nữa bằng cách sử dụng từ khóa ném.

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

Đầu ra

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)