एक static ब्लॉक स्टेटमेंट्स का एक सेट है, जिसे JVM द्वारा main() मेथड के निष्पादन से पहले निष्पादित किया जाएगा। क्लास लोडिंग के समय यदि हम कोई गतिविधि करना चाहते हैं तो हमें उस गतिविधि को static ब्लॉक के अंदर परिभाषित करना होगा क्योंकि यह ब्लॉक क्लास लोडिंग के समय निष्पादित होता है।
Static ब्लॉक से अपवाद फेंकना
- एक static ब्लॉक केवल एक RunTimeException फेंक सकता है, या एक चेक्ड अपवाद को पकड़ने के लिए try और catch ब्लॉक होना चाहिए।
- एक static ब्लॉक तब होता है जब एक क्लास को क्लास लोडर द्वारा लोड किया जाता है। कोड या तो static ब्लॉक के रूप में आ सकता है या static डेटा मेंबर को इनिशियलाइज़ करने के लिए static मेथड के कॉल के रूप में।
- दोनों मामलों में, चेक्ड अपवादों को कंपाइलर द्वारा अनुमति नहीं दी जाती। जब एक अनचेक्ड अपवाद होता है, तो इसे ExceptionInInitializerError द्वारा रैप किया जाता है, जिसे तब उस थ्रेड के कॉन्टेक्स्ट में फेंका जाता है जिसने क्लास लोडिंग को ट्रिगर किया।
- static ब्लॉक से चेक्ड अपवाद फेंकने का प्रयास भी संभव नहीं है। हम एक static ब्लॉक में try और 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)