स्टेटिक कंट्रोल फ्लो स्टेटिक मेंबर्स की पहचान करता है, स्टेटिक ब्लॉक्स को निष्पादित करता है, और फिर स्टेटिक मुख्य मेथड को निष्पादित करता है।
उदाहरण
public class Demo {
static int a = 97;
public static void main(String[] args) {
print();
System.out.println("मुख्य मेथड निष्पादन पूरा हुआ");
}
static {
System.out.println(a);
print();
System.out.println("हम पहले स्टेटिक ब्लॉक में हैं");
}
public static void print() {
System.out.println(b);
}
static {
System.out.println("हम दूसरे स्टेटिक ब्लॉक में हैं");
}
static int b = 899;
}
आउटपुट
97
0
हम पहले स्टेटिक ब्लॉक में हैं
हम दूसरे स्टेटिक ब्लॉक में हैं
899
मुख्य मेथड निष्पादन पूरा हुआ
व्याख्या: Demo नामक एक क्लास में एक स्टेटिक वेरिएबल, और एक मुख्य फंक्शन होता है, जहां 'print' फंक्शन को कॉल किया जाता है। एक अन्य स्टेटिक ब्लॉक पहले से परिभाषित स्टेटिक वेरिएबल को प्रिंट करता है और 'print' फंक्शन को फिर से कॉल करता है। एक अन्य स्टेटिक 'print' फंक्शन परिभाषित होता है, जो दूसरे वेरिएबल को प्रिंट करता है। फिर एक और स्टेटिक ब्लॉक परिभाषित होता है, जो प्रासंगिक संदेश प्रिंट करता है। इन सभी स्टेटिक कोड ब्लॉक्स के बाहर, एक और स्टेटिक इंटीजर परिभाषित होता है।
स्टेटिक इनिशियलाइज़ेशन क्रम:
- स्टेटिक फील्ड्स को डिफ़ॉल्ट मानों पर आरंभ किया जाता है (int=0, boolean=false, ref=null)
- स्टेटिक फील्ड इनिशियलाइज़र्स और स्टेटिक ब्लॉक्स को टेक्स्ट क्रम में (ऊपर से नीचे) निष्पादित किया जाता है
- मुख्य मेथड निष्पादित होता है
उदाहरण में चरण-दर-चरण:
1. static int a = 97; // a = 97
2. static int b; // b = 0 (डिफ़ॉल्ट)
3. static { // पहला स्टेटिक ब्लॉक
println(a); // 97
print(); // b प्रिंट करता है (0)
println("पहला ब्लॉक");
}
4. static { // दूसरा स्टेटिक ब्लॉक
println("दूसरा ब्लॉक");
}
5. static int b = 899; // b = 899
6. main() // मुख्य मेथड
print(); // b प्रिंट करता है (899)
println("मुख्य पूरा")
मुख्य नियम:
- स्टेटिक मेंबर्स को उनके घोषणा क्रम में आरंभ किया जाता है
- फॉरवर्ड रेफरेंसिंग की अनुमति है (बाद में घोषित वेरिएबल का उपयोग)
- लेकिन फॉरवर्ड रीडिंग डिफ़ॉल्ट मान देती है (ऊपर b=0 देखें)