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