यह सीधे http://www.programcreek.com/2011/10/java-class-instance-initializers/ से है
1. निष्पादन आदेश
निम्नलिखित वर्ग को देखें, क्या आप जानते हैं कि कौन सा पहले निष्पादित होता है?
public class Foo {
//instance variable initializer
String s = "abc";
//constructor
public Foo() {
System.out.println("constructor called");
}
//static initializer
static {
System.out.println("static initializer called");
}
//instance initializer
{
System.out.println("instance initializer called");
}
public static void main(String[] args) {
new Foo();
new Foo();
}
}
आउटपुट:
स्टैटिक इनिशियलाइज़र कहलाता है
उदाहरण इनिशाइज़र कहा जाता है
कंस्ट्रक्टर कहा जाता है
उदाहरण इनिशाइज़र कहा जाता है
कंस्ट्रक्टर कहा जाता है
2. जावा इंस्टालाइज़र कैसे काम करता है?
ऊपर दिए गए उदाहरण इनिशलाइज़र में एक प्रिंटल स्टेटमेंट होता है। यह समझने के लिए कि यह कैसे काम करता है, हम इसे एक चर असाइनमेंट स्टेटमेंट के रूप में मान सकते हैं, जैसे,b = 0
। यह समझना अधिक स्पष्ट कर सकता है।
के बजाय
int b = 0
, आप लिख सकते हैं
int b;
b = 0;
इसलिए, उदाहरण के शुरुआती और उदाहरण चर शुरुआती बहुत अधिक हैं।
3. उदाहरण के लिए इनिशियलाइज़र कब उपयोगी होते हैं?
उदाहरण इनिशियलएज़र का उपयोग दुर्लभ है, लेकिन फिर भी यह वैरिएबल इनिशियलाइज़र के लिए एक उपयोगी विकल्प हो सकता है यदि:
- शुरुआती कोड को अपवादों को संभालना होगा
- ऐसी गणनाएँ करें जिन्हें एक उदाहरण चर आरंभीकरण के साथ व्यक्त नहीं किया जा सकता है।
बेशक, इस तरह के कोड को कंस्ट्रक्टरों में लिखा जा सकता है। लेकिन यदि किसी वर्ग के पास कई कंस्ट्रक्टर हैं, तो आपको प्रत्येक कंस्ट्रक्टर में कोड दोहराना होगा।
एक उदाहरण इनिशलाइज़र के साथ, आप बस एक बार कोड लिख सकते हैं, और यह निष्पादित किया जाएगा कि कोई फर्क नहीं पड़ता कि क्या निर्माता का उपयोग ऑब्जेक्ट बनाने के लिए किया जाता है। (मुझे लगता है कि यह सिर्फ एक अवधारणा है, और इसका उपयोग अक्सर नहीं किया जाता है।)
एक और मामला जिसमें उदाहरण के लिए शुरुआती उपयोगी होते हैं, अनाम आंतरिक वर्ग होते हैं, जो किसी भी निर्माता को बिल्कुल भी घोषित नहीं कर सकते हैं। (क्या यह लॉगिंग फंक्शन लगाने के लिए एक अच्छी जगह होगी?)
डेहरिन को धन्यवाद।
यह भी ध्यान दें कि इंटरफेस को लागू करने वाले बेनामी वर्गों [1] का कोई निर्माता नहीं है। इसलिए निर्माण के समय किसी भी प्रकार के भाव को निष्पादित करने के लिए उदाहरण के लिए इनिशियलाइज़र की आवश्यकता होती है।
public static void staticMethod(){}
, यदि आप निष्पादित करते हैंTestStatic.class.getMethod("staticMethod");
। स्थिर इनिशियलाइज़र को लागू नहीं किया जाएगा। अधिक जानकारी यहाँ docs.oracle.com/javase/specs/jvms/se10/html/...