आज्ञा देना एक और अधिक स्पष्ट उदाहरण के साथ व्यक्त:
public class Test {
static {
System.out.println("static initializer");
}
{
System.out.println("instance initializer");
}
public Test() {
System.out.println("constructor");
}
}
और यह परीक्षण इस प्रकार है:
public class Main {
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
}
}
उत्पादन:
static initializer
instance initializer
constructor
instance initializer
constructor
स्थिर initializers केवल एक बार क्रियान्वित कर रहे हैं रनटाइम के दौरान, विशेष रूप से कक्षा के लोड होने के दौरान। इंस्टेंस प्रारंभकर्ता को कन्स्ट्रक्टर से पहले प्रत्येक तत्कालता के दौरान निष्पादित किया जाता है।
आप उनमें से एक से अधिक हो सकते हैं और कोडिंग में दिखाई देने पर उन्हें आदेश में निष्पादित किया जाएगा।
उदाहरण प्रारंभकर्ताओं का प्रमुख लाभ यह है कि आप किस कन्स्ट्रक्टर का उपयोग करते हैं, इस पर ध्यान दिए बिना उन्हें निष्पादित किया जाता है। वे उनमें से प्रत्येक पर लागू होते हैं ताकि आपको उन सभी पर सामान्य प्रारंभिकता को डुप्लिकेट करने की आवश्यकता न हो।
स्थैतिक प्रारंभकर्ताओं का प्रमुख लाभ यह है कि उन्हें कक्षा लोडिंग के दौरान केवल एक बार निष्पादित किया जाता है। एक प्रसिद्ध असली दुनिया उदाहरण जेडीबीसी चालक है। जब आप
Class.forName("com.example.jdbc.Driver");
जो केवल static
initializers कार्यान्वित करते हैं, तो किसी भी (सभ्य) JDBC ड्राइवर ही DriverManager
में के रूप में
static {
DriverManager.registerDriver(new com.example.jdbc.Driver());
}
इस तरह DriverManager
पा सकते हैं के दौरान सही JDBC ड्राइवर इस प्रकार दर्ज किए जाएंगे getConnection()
।
तो स्थिर कीवर्ड वैकल्पिक है? – blackanchorage
तो यदि उपरोक्त कोड में एक स्थिर ब्लॉक बनाते हैं, जो पहले स्थिर ब्लॉक या स्थैतिक प्रारंभकर्ता ब्लॉक चलाएगा? .... क्या आप समझा सकते हैं कि स्थैतिक प्रारंभकर्ता क्या है? – Hariharbalaji
यह निश्चित रूप से 'स्थिर 'प्रारंभकर्ता नहीं है। – BalusC