Constructor in Java in hindi: कंस्ट्रक्टर ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक महत्वपूर्ण पहलू हैं और जावा प्रोग्रामिंग में व्यापक रूप से उपयोग किए जाते हैं। कंस्ट्रक्टर एक विशेष प्रकार की मेथड है जिसका उपयोग किसी ऑब्जेक्ट को इनिशियलाइज़ करने के लिए किया जाता है जब यह बनाया जाता है। इस लेख में, इस लेख में मैं आपको समझाऊंगा कि कंस्ट्रक्टर क्या हैं, जावा प्रोग्रामिंग में उनका महत्व, जावा में विभिन्न प्रकार के कौन कौन सी कंस्ट्रक्टर है, उनके सिंटैक्स और वे कैसे काम करते हैं।
कंस्टक्टर क्या है (What is a Constructor) ?
कंस्ट्रक्टर एक विशेष प्रकार की मेथड है जिसे ऑब्जेक्ट बनाते समय कल किया जाता है। इसका उपयोग ऑब्जेक्ट की स्थिति को इनिशियलाइज़ करने और इसके लिए मेमोरी आवंटित करने के लिए किया जाता है। कंस्ट्रक्टर्स का वही नाम होता है जो उसकी क्लास का नाम होता है, और उसके पास रिटर्न के प्रकार नहीं होता है। कंस्ट्रक्टर का उपयोग किसी ऑब्जेक्ट के फिल्ड के प्रारंभिक मूल्यों को निर्धारित करने के लिए किया जाता है।
जावा प्रोग्रामिंग में कंस्ट्रक्टर का क्या महत्व है (Importance of Constructor in Java programming) ?
कंस्ट्रक्टर जावा प्रोग्रामिंग का एक महत्वपर्ण हिस्सा हैं, क्योंकि वे किसी ऑब्जेक्टस के बनने के समय उसकी स्थिति को आरंभ करने के लिए जिम्मेदार होते हैं। उनका उपयोग यह सुनिश्चित करने के लिए किया जाता है कि कोई ऑब्जेक्ट एक valid state में है जब इसे बनाया गया है और इसके लिए मेमोरी आवंटित की गई है। कंस्ट्रक्टर्स का उपयोग क्लास के इनवेरिएंट्स को लागू करने के लिए भी किया जाता है, जो कि क्लास के व्यवहार को नियंत्रित करने वाले नियम हैं।
कंस्ट्रक्टर कब बंससमक किया जाता है (When Constructor is called)?
एक कंस्ट्रक्टर को ऑटोमैटिक कॉल किया जाता है जब ‘new’ कीवर्ड का उपयोग करके संबंधित क्लास का ऑब्जेक्ट बनाया जाता है। कंस्ट्रक्टर को ऑब्जेक्ट निर्माण के समय बंससमक किया जाता है, और यह ऑब्जेक्ट की स्थिति को इसके इंस्टेंस वेरिएबल्स को मान निर्दिष्ट करके initialize करता है। एक बार कंस्ट्रक्टर को कॉल करने और execute करने के बाद, ऑब्जेक्ट पूरी तरह से इनिशियलाइज़ हो जाता है और प्रोग्राम में इस्तेमाल किया जा सकता है।
जिस क्रम में कंस्ट्रक्टर को कॉल किया जाता है वह इनहेरिटेंस hierarchy पर निर्भर करता है। यदि एक सब क्लास कंस्ट्रक्टर को कॉल किया जाता है, तो उसे अपने कोड को execute करने से पहले अपने सुपरक्लास कंस्ट्रक्टर को पहले कॉल करना होगा। यह ’super’ कीवर्ड का उपयोग करके किया जाता है, जो सुपरक्लास कंस्ट्रक्टर को आमंत्रित (invokes) करता है।
जावा में कितने प्रकार के कंस्ट्रक्टर होते हैं (Types of Constructor in Java)?
जावा में तीन प्रकार के कंस्ट्रक्टर हैंः 1) डिफॉल्ट कंस्ट्रक्टर, 2) पैरामीटराइज्ड कंस्ट्रक्टर और 3) कॉपी कंस्ट्रक्टर।
Default Constructors
डिफॉल्ट कंस्ट्रक्टर एक कंस्ट्रक्टर है जो कोई तर्क (arguments) नहीं लेता है। यदि क्लास में कोई कन्स्ट्रक्टर declare नहीं किया गया है तो यह ऑटोमैटिक कंपाइलर द्वारा जेनरेट किया जाता है। डिफॉल्ट कन्स्ट्रक्टर सभी फ़ील्ड को उनके डिफ़ॉल्ट मानों में initialize करता है, जो numeric types के लिए 0 हैं, बूलियन types के लिए false हैं, और ऑब्जेक्ट संदर्भों के लिए null हैं।
Parameterized Constructors
पैरामिट्रीकृत कंस्ट्रक्टर एक कंस्ट्रक्टर है जो एक या अधिक तर्क (arguments) लेता है। इसका उपयोग ऑब्जेक्ट के फ़ील्ड को विशिष्ट मानों (specific values) के साथ initialize करने के लिए किया जाता है। एक पैरामीटरयुक्त कंस्ट्रक्टर को कंस्ट्रक्टर के हस्ताक्षर में मापदंडों को निर्दिष्ट करके परिभाषित किया गया है।
Copy Constructors
एक कॉपी कंस्ट्रक्टर एक कंस्ट्रक्टर है जो एक ही class के एक ऑब्जेक्ट को एक पैरामीटर के रूप में लेता है। इसका उपयोग एक नई ऑब्जेक्ट बनाने के लिए किया जाता है जो मूल ऑब्जेक्ट की एक प्रति है। कॉपी कंस्ट्रक्टर का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि कॉपी की जा रही ऑब्जेक्ट वैध स्थिति (valid state) में है।
कंस्ट्रक्टर्स का सिंटैक्स कैसे होता है (Syntax of Constructor) ?
कंस्ट्रक्टर का सिंटैक्स इस प्रकार हैः
public class MyClass {
// Fields
// Constructors
public MyClass() {
// Code to initialize fields
}
public MyClass(int parameter1, String parameter2) {
// Code to initialize fields with parameter values
}
public MyClass(MyClass original) {
// Code to create a copy of original
}
}
ऊपर दिए गए उदाहरण में, हमने ‘MyClass’ नाम की एक क्लास को परिभाषित किया है जिसमें तीन कंस्ट्रक्टर हैं। पहला कंस्ट्रक्टर डिफॉल्ट कंस्ट्रक्टर है, दूसरा एक पैरामीटराइज्ड कंस्ट्रक्टर है जो एक integer और एक स्ट्रिंग को पैरामीटर के रूप में लेता है, और तीसरा एक कॉपी कंस्ट्रक्टर है जो एक ही क्लास के ऑब्जेक्ट को पैरामीटर के रूप में लेता है।
Java class में कन्स्ट्रक्टर को कैसे declare किया जाता है ?
Java class में कंस्ट्रक्टर declare करने के लिए, आपको निचे दिए गए चरणों का पालन करना होगाः
- कंस्ट्रक्टर के एक्सेस मॉडिफायर को निर्दिष्ट करें (public, private या protected) ।
- कंस्ट्रक्टर का नाम निर्दिष्ट करें (जो class के नाम के समान है)।
- कंस्ट्रक्टर के parameters को परिभाषित करें, यदि कोई हो।
- कंस्ट्रक्टर का कोड लिखें।
जावा क्लास में कन्स्ट्रक्टर declare करने का एक उदाहरण यहां दिया गया हैः
public class MyClass {
private int myNumber;
public MyClass(int number) {
myNumber = number;
}
}
इस उदाहरण में, हमने एक कन्स्ट्रक्टर declare किया है जो ’number’ नामक एक पूर्णांक पैरामीटर लेता है। कंस्ट्रक्टर ‘myNumber’ फ़ील्ड को ’number’ पैरामीटर के मान से इनिशियलाइज़ करता है।
कंस्ट्रक्टर ओवरलोडिंग क्या है (What is Constructor overloading)?
कंस्ट्रक्टर ओवरलोडिंग एक क्लास में कई कंस्ट्रक्टर्स को परिभाषित (define) करने की प्रक्रिया है जिसमें अलग-अलग पैरामीटर होते हैं। यह हमें कंस्ट्रक्टर को दिए गए मापदंडों के आधार पर विभिन्न प्रारंभिक अवस्थाओं के साथ ऑब्जेक्ट बनाने की अनुमति देता है। कन्स्ट्रक्टर ओवरलोडिंग मेथड ओवरलोडिंग के समान है, जहां कई मेथड्स में एक ही नाम हो सकता है लेकिन विभिन्न पैरामीटर हो सकते हैं।
कंस्ट्रक्टर ओवरलोडिंग का निचे एक उदाहरण दिया गया हैः
public class MyClass {
private int myNumber;
public MyClass() {
myNumber = 0;
}
public MyClass(int number) {
myNumber = number;
}
public MyClass(String text) {
myNumber = Integer.parseInt(text);
}
}
इस उदाहरण में, हमने ’MyClass’ क्लास के लिए तीन कंस्ट्रक्टर परिभाषित किए हैं। पहला कंस्ट्रक्टर कोई पैरामीटर नहीं लेता है और ’myNumber’ फ़ील्ड को 0, पर इनिशियलाइज़ करता है। दूसरा कंस्ट्रक्टर एक integer पैरामीटर लेता है और पैरामीटर के मान के साथ ’myNumber’ फ़ील्ड को इनिशियलाइज़ करता है। तीसरा कंस्ट्रक्टर एक string पैरामीटर लेता है और इसे ’Integer’ class की ’parseInt’ मेथड का उपयोग करके एक integer में परिवर्तित करता है।
जावा में कंस्ट्रक्टर कैसे काम करते हैं (How Constructors work in Java)?
जब कोई ऑब्जेक्ट बनाया जाता है, तो कन्स्ट्रक्टर को ऑटोमेटिकली कॉल किया जाता है। कन्स्ट्रक्टर ऑब्जेक्ट के फ़ील्ड को पैरामीटर के रूप में पारित मानों के साथ या उनके डिफ़ॉल्ट मानों के साथ प्रारंभ करता है यदि कोई पैरामीटर पारित नहीं होता है। कंस्ट्रक्टर ऑब्जेक्ट के लिए मेमोरी भी आवंटित करता है और इसकी प्रारंभिक स्थिति (initial state) निर्धारित करता है।
कन्स्ट्रक्टर इनवोकेशन का क्रम इनहेरिटेंस हायरार्की (inheritance hierarchy) द्वारा निर्धारित किया जाता है। यदि क्लास में सुपरक्लास है, तो सुपरक्लास के कंस्ट्रक्टर को पहले कॉल्ड किया जाता है, उसके बाद सबक्लास के कंस्ट्रक्टर को। यह तब तक जारी रहता है जब तक कि top-level सुपरक्लास तक नहीं पहुंच जाता। एक बार कंस्ट्रक्टर चेन पूरी हो जाने के बाद, ऑब्जेक्ट पूरी तरह से इनिशियलाइज़ हो जाता है और इसका इस्तेमाल किया जा सकता है।
Read Also: राजस्थान किसान कर्ज माफी योजना क्या है, इसके फायदे, पात्रता आवेदन कैसे करें
कंस्ट्रक्टर का उपयोग करते समय नए लोग कौनसी कॉमन गलतियाँ करते हैं ?
नए लोग अक्सर जावा में कंस्ट्रक्टर्स का उपयोग करते समय कुछ कॉमन गलतियाँ करते हैं जैसे :
- एक कंस्ट्रक्टर को परिभाषित करना भूल जानाः यदि एक क्लास में एक कंस्ट्रक्टर को परिभाषित नहीं किया गया है, तो कंपाइलर द्वारा डिफ़ॉल्ट कंस्ट्रक्टर उत्पन्न किया जाता है। हालाँकि, यदि एक पैरामीटरयुक्त कंस्ट्रक्टर की आवश्यकता है, तो इसे स्पष्ट रूप से परिभाषित किया जाना चाहिए।
- गलत पैरामीटर प्रकारों का उपयोग करनाः यदि कंस्ट्रक्टर को दिए गए पैरामीटर प्रकार कंस्ट्रक्टर में परिभाषित प्रकारों से मेल नहीं खाते हैं, तो एक संकलन त्रुटि उत्पन्न होगी।
- सभी फ़ील्ड्स को इनिशियलाइज़ नहीं करनाः किसी ऑब्जेक्ट के सभी फ़ील्ड्स को कंस्ट्रक्टर में इनिशियलाइज़ किया जाना चाहिए। यदि किसी फ़ील्ड को इनिशियलाइज़ नहीं किया गया है, तो उसका डिफ़ॉल्ट मान होगा, जो अपेक्षित नहीं हो सकता है।
- एक ही सिग्नेचर वाले कंस्ट्रक्टर्स को ओवरलोड करनाः ओवरलोड होने के लिए कंस्ट्रक्टर्स के अलग-अलग सिग्नेचर होने चाहिए। यदि कंस्ट्रक्टर के समान हस्ताक्षर हैं, तो एक संकलन त्रुटि उत्पन्न होगी।
- सुपरक्लास कंस्ट्रक्टर्स को कॉल नहीं करनाः यदि कोई सबक्लास सुपरक्लास कंस्ट्रक्टर को स्पष्ट रूप से कॉल नहीं करता है, तो सुपरक्लास के डिफॉल्ट कंस्ट्रक्टर को कॉल किया जाएगा। इससे अनपेक्षित व्यवहार हो सकता है।
कन्स्ट्रक्टर का उपयोग करते समय कॉमन गलतियों से बचने के लिए Best Practices कौनसी है ?
जावा प्रोग्रामिंग में कंस्ट्रक्टर्स का उपयोग करते समय कॉमन गलतियों से बचने के लिए आपको निचे दिए गये सर्वोत्तम अभ्यासों का पालन करना चाहिएः
- कंस्ट्रक्टर्स को स्पष्ट रूप से परिभाषित करेंः कंपाइलर द्वारा उत्पन्न डिफॉल्ट कंस्ट्रक्टर पर भरोसा करने के बजाय स्पष्ट रूप से कंस्ट्रक्टर्स को परिभाषित करना एक अच्छा अभ्यास है।
- सही पैरामीटर प्रकारों का उपयोग करेंः हमेशा सुनिश्चित करें कि कंस्ट्रक्टर को दिए गए पैरामीटर प्रकार कंस्ट्रक्टर में परिभाषित प्रकारों से मेल खाते हैं।
- सभी फ़ील्ड्स को इनिशियलाइज़ करेंः किसी ऑब्जेक्ट के सभी फ़ील्ड्स को कंस्ट्रक्टर में इनिशियलाइज़ किया जाना चाहिए, भले ही वैल्यू शून्य या 0 हो।
- ओवरलोडेड कंस्ट्रक्टर के लिए अलग-अलग सिग्नेचर का उपयोग करेंः एक ही सिग्नेचर वाले कंस्ट्रक्टर को ओवरलोड नहीं किया जा सकता है, इसलिए कई कंस्ट्रक्टर को परिभाषित करते समय अलग-अलग सिग्नेचर का उपयोग करें।
- सुपरक्लास कंस्ट्रक्टर को स्पष्ट रूप से कॉल करेंः सबक्लास कंस्ट्रक्टर को परिभाषित करते समय, सुपर कीवर्ड का उपयोग करके हमेशा सुपरक्लास कंस्ट्रक्टर को स्पष्ट रूप से कॉल करें।
निष्कर्ष (Conclusion)
कंस्ट्रक्टर्स जावा प्रोग्रामिंग का एक अनिवार्य हिस्सा हैं, क्योंकि इनका उपयोग किसी वस्तु के बनने पर उसकी स्थिति को आरंभ करने के लिए किया जाता है। उनका उपयोग यह सुनिश्चित करने के लिए किया जाता है कि कोई वस्तु एक वैध स्थिति में है जब इसे बनाया गया है और इसके लिए मेमोरी आवंटित की गई है। इस लेख में, हमने चर्चा की है कि कंस्ट्रक्टर क्या हैं, जावा प्रोग्रामिंग में उनका महत्व, जावा में विभिन्न प्रकार के कंस्ट्रक्टर, उनके सिंटैक्स, उन्हें जावा क्लास में कैसे घोषित किया जाए, कंस्ट्रक्टर ओवरलोडिंग, कंस्ट्रक्टर जावा में कैसे काम करते हैं, और सामान्य गलतियाँ जावा में कंस्ट्रक्टर का उपयोग करते समय शुरुआती बनाते हैं।
इस आलेख में चर्चा की गई सर्वोत्तम प्रथाओं का पालन करके, आप इन सामान्य गलतियों से बच सकते हैं और अधिक कुशल और विश्वसनीय कोड लिख सकते हैं। कंस्ट्रक्टर ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक अनिवार्य हिस्सा हैं और यह समझना कि उन्हें प्रभावी ढंग से कैसे उपयोग करना है, किसी भी जावा प्रोग्रामर के लिए महत्वपूर्ण है।
अन्य लेख पढ़ें :
FAQs on Constructor in Java
जावा में कन्स्ट्रक्टर और method के बीच क्या अंतर है ?
एक कंस्ट्रक्टर एक विशेष विधि है जिसका उपयोग किसी वस्तु के बनने पर उसकी स्थिति को आरंभ करने के लिए किया जाता है। इसका नाम क्लास के समान है और इसका कोई रिटर्न प्रकार नहीं है। दूसरी ओर एक मेथड का उपयोग किसी ऑब्जेक्ट पर कुछ ऑपरेशन करने के लिए किया जाता है और इसका रिटर्न प्रकार हो सकता है।
क्या जावा में एक कन्स्ट्रक्टर private हो सकता है ?
हां, जावा में एक कंस्ट्रक्टर को private बनाया जा सकता है। यह अक्सर सिंगलटन डिज़ाइन पैटर्न में उपयोग किया जाता है ताकि यह सुनिश्चित किया जा सके कि एक क्लास का केवल एक उदाहरण बनाया जा सकता है।
क्या एक कंस्ट्रक्टर जावा में एक मेथड को कॉल कर सकता है ?
हां, कंस्ट्रक्टर जावा में एक मेथड को कॉल कर सकता है। हालांकि, आमतौर पर ऐसा करने की अनुशंसा नहीं की जाती है, क्योंकि हो सकता है कि जिस समय मेथड को कॉल किया जाता है उस समय ऑब्जेक्ट पूरी तरह से इनिशियलाइज़ न हो।
जावा में डिफॉल्ट कंस्ट्रक्टर क्या है ?
डिफॉल्ट कंस्ट्रक्टर एक कंस्ट्रक्टर है जो कंपाइलर द्वारा जेनरेट किया जाता है यदि किसी क्लास में कोई कंस्ट्रक्टर परिभाषित नहीं है। यह कोई पैरामीटर नहीं लेता है और सभी फ़ील्ड्स को उनके डिफ़ॉल्ट मानों में प्रारंभ करता है।
क्या जावा के क्लास में एक से अधिक कन्स्ट्रक्टर हो सकते हैं ?
हां, जावा में एक क्लास में एक से अधिक कंस्ट्रक्टर हो सकते हैं। इसे कंस्ट्रक्टर ओवरलोडिंग के रूप में जाना जाता है, और यह आपको विभिन्न मापदंडों के साथ कई कंस्ट्रक्टर्स को परिभाषित करने की अनुमति देता है।