Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีโยน Exception จาก Static Block ใน Java

Static block คือชุดคำสั่งที่จะถูก execute โดย JVM ก่อนการ execute main() method ขณะโหลดคลาส หากเราต้องการทำกิจกรรมใดๆ เราต้องกำหนดกิจกรรมนั้นใน static block เพราะบล็อกนี้ execute ที่ เวลาโหลดคลาส (class loading)

การโยน Exception จาก Static Block

  • Static block สามารถโยนได้แค่ RunTimeException หรือต้องมี try-catch block เพื่อจับ checked exception
  • Static block เกิดขึ้นเมื่อคลาสถูกโหลดโดย class loader โค้ดอาจอยู่ในรูป static block หรือเป็นการเรียก static method เพื่อ initialize static data member
  • ในทั้งสองกรณี checked exceptions ไม่อนุญาตโดยคอมไพเลอร์ เมื่อ unchecked exception เกิดขึ้น จะถูก wrap ด้วย ExceptionInInitializerError ซึ่งจะถูกโยนใน context ของ thread ที่กระตุ้น class loading
  • การพยายามโยน checked exception จาก static block ก็ไม่ได้ เราสามารถมี try-catch block ใน static block ที่ checked exception อาจโยนจาก try block แต่เราต้อง resolve มันภายใน catch block ไม่สามารถ propagate ต่อด้วย throw keyword ได้

ตัวอย่าง

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)