जावा में एक कंस्ट्रक्टर क्या है और आप इसका उपयोग कैसे करते हैं?

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, कंस्ट्रक्टर एक विशेष फ़ंक्शन होता है जिसे आप ऑब्जेक्ट बनाने के लिए कहते हैं। कंस्ट्रक्टर्स में कई अनूठी विशेषताएं होती हैं जो उन्हें काम करने में सक्षम बनाती हैं।

जावा में, आप एक कंस्ट्रक्टर को उसके वर्ग के नाम पर रखते हैं। एक कंस्ट्रक्टर एक विधि है, जिसे उस वर्ग में परिभाषित किया जाता है जिस पर वह लागू होता है। जावा कंस्ट्रक्टर वैकल्पिक व्यवहार प्रदान करने के लिए ओवरलोडिंग का उपयोग कर सकते हैं। जावा में कंस्ट्रक्टर कोड का पुन: उपयोग करने के लिए इनहेरिटेंस का भी उपयोग कर सकते हैं।

आपको वैसे भी कंस्ट्रक्टर्स की आवश्यकता क्यों है?

कंस्ट्रक्टर ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का मुख्य आधार हैं, और जावा कोई अपवाद नहीं है। यह उदाहरण दिखाता है कि आप एक डेटा प्रॉपर्टी और एक विधि के साथ एक मूल सर्कल क्लास को कैसे परिभाषित कर सकते हैं:

 public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

फिर आप इस वर्ग का एक उदाहरण बना सकते हैं और इसके साथ बातचीत कर सकते हैं:

 Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

लेकिन यह जितना हो सकता है उससे कम सुविधाजनक और मजबूत है। डेटा को इनकैप्सुलेट करना, इसे अनधिकृत पहुंच से बचाना एक अच्छा ऑब्जेक्ट-ओरिएंटेड अभ्यास है:

 public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

अब कॉलिंग कोड setRadius विधि का उपयोग कर सकता है और इसके कार्यान्वयन विवरण के बारे में चिंता करने की आवश्यकता नहीं है:

 Circle c = new Circle();
c.setRadius(2);

जब आप इसे बनाते हैं तो कंस्ट्रक्टर किसी ऑब्जेक्ट को डेटा की आपूर्ति करने का एक बेहतर तरीका प्रदान करते हैं। वे अक्सर गुणों के आरंभीकरण के लिए उपयोग किए जाते हैं, जैसे कि यहां त्रिज्या

सरल कंस्ट्रक्टर्स के उदाहरण

सबसे बुनियादी कंस्ट्रक्टर वह है जिसमें कोई तर्क नहीं है, जो कुछ भी नहीं करता है:

 public class Circle {
public Circle() {}
}

यह भी देखें: जावा में कक्षाएं कैसे बनाएं सीखें

यदि आप एक कंस्ट्रक्टर को परिभाषित नहीं करते हैं, तो जावा एक डिफ़ॉल्ट प्रदान करेगा जो उसी तरह व्यवहार करता है।

कुछ बातों पर ध्यान दें:

  1. कंस्ट्रक्टर का नाम वर्ग के नाम से मेल खाता है।
  2. यह कंस्ट्रक्टर पब्लिक एक्सेस मॉडिफायर का उपयोग करता है, इसलिए कोई अन्य कोड इसे कॉल कर सकता है।
  3. एक कंस्ट्रक्टर में रिटर्न टाइप शामिल नहीं होता है। अन्य विधियों के विपरीत, कंस्ट्रक्टर एक मान वापस नहीं कर सकते।

कंस्ट्रक्टर आमतौर पर किसी तरह का इनिशियलाइज़ेशन करते हैं। ध्यान दें कि उपरोक्त कोड त्रिज्या के मान को प्रारंभ नहीं करता है। इस मामले में, भाषा स्वचालित रूप से इसे शून्य पर सेट कर देगी। यह वर्ग उपयोगकर्ता से setRadius() का उपयोग करने की अपेक्षा करता है। 0 से अधिक उपयोगी डिफ़ॉल्ट का उपयोग करने के लिए, आप इसे कंस्ट्रक्टर के भीतर असाइन कर सकते हैं:

 public class Circle {
public Circle() { radius = 1; }
}

इस वर्ग के साथ बनाई गई मंडलियों का कम से कम अब एक वास्तविक क्षेत्र होगा! कॉलर अभी भी 1 के अलावा एक त्रिज्या प्रदान करने के लिए setRadius() का उपयोग कर सकता है। लेकिन कंस्ट्रक्टर और भी मित्रवत हो सकता है:

 public class Circle {
public Circle(double r) { radius = r; }
}

अब आप जन्म से ही एक विशिष्ट दायरे के साथ मंडलियां बना सकते हैं:

 Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

यह कंस्ट्रक्टर्स के लिए एक बहुत ही सामान्य उपयोग है। आप अक्सर उनका उपयोग चर को पैरामीटर मानों में प्रारंभ करने के लिए करेंगे।

कंस्ट्रक्टर ओवरलोडिंग

आप एक वर्ग परिभाषा में एक से अधिक कंस्ट्रक्टर निर्दिष्ट कर सकते हैं:

 public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

यह कॉलिंग कोड को वस्तुओं के निर्माण का विकल्प देता है:

 Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ", " + c2.area()); // 12.56636, 3.14159

थोड़े अधिक जटिल सर्कल के साथ, आप अधिक दिलचस्प कंस्ट्रक्टरों का पता लगा सकते हैं। यह संस्करण अपनी स्थिति संग्रहीत करता है:

 public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

अब आप बिना किसी तर्क के एक वृत्त बना सकते हैं, एक एकल त्रिज्या, या त्रिज्या के साथ x और y निर्देशांक। यह उसी प्रकार का ओवरलोडिंग है जो जावा किसी भी विधि के लिए समर्थन करता है।

कंस्ट्रक्टर चेनिंग

एक सर्कल को दूसरे के आधार पर बनाने के बारे में कैसे? यह हमें मंडलियों को आसानी से कॉपी करने की क्षमता देगा। निम्नलिखित ब्लॉक का निरीक्षण करें:

 public Circle(Circle c) {
this.x = cx;
this.y = cy;
this.radius = c.radius;
}

यह काम करेगा, लेकिन यह अनावश्यक रूप से कुछ कोड दोहराता है। चूंकि सर्कल क्लास में पहले से ही एक कंस्ट्रक्टर है जो व्यक्तिगत गुणों को संभालता है, आप इस कीवर्ड का उपयोग करने के बजाय इसे कॉल कर सकते हैं:

 public Circle(Circle c) {
this(cx, cy, c.radius);
}

यह कंस्ट्रक्टर चेनिंग का एक रूप है, एक कंस्ट्रक्टर को दूसरे से कॉल करना। यह कम कोड का उपयोग करता है और एक ऑपरेशन को डुप्लिकेट करने के बजाय केंद्रीकृत करने में मदद करता है।

पेरेंट कंस्ट्रक्टर को कॉल करना

कंस्ट्रक्टर चेनिंग का दूसरा रूप तब होता है जब एक कंस्ट्रक्टर अपने मूल वर्ग के कंस्ट्रक्टर को कॉल करता है। यह या तो स्पष्ट या निहित हो सकता है। पैरेंट कंस्ट्रक्टर को स्पष्ट रूप से कॉल करने के लिए, सुपर कीवर्ड का उपयोग करें:

 super(x, y);

सर्कल के माता-पिता के रूप में अभिनय करने वाले आकार वर्ग की कल्पना करें:

 public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

यह सभी आकृतियों के लिए सामान्य स्थिति को संभालता है क्योंकि यह कार्यक्षमता है जो वे सभी साझा करते हैं। अब मंडल वर्ग अपने माता-पिता को स्थिति प्रबंधन सौंप सकता है:

 public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

सुपरक्लास निर्माण जावा में विरासत का एक बहुत ही महत्वपूर्ण पहलू है। यदि आप अपने कंस्ट्रक्टरों में स्पष्ट रूप से सुपर को कॉल नहीं करते हैं तो भाषा डिफ़ॉल्ट रूप से इसे लागू करती है।

कंस्ट्रक्टर्स पर एक्सेस मॉडिफायर

कंस्ट्रक्टर अपने हस्ताक्षर में एक एक्सेस संशोधक शामिल कर सकते हैं। अन्य तरीकों की तरह, यह परिभाषित करता है कि किस प्रकार का कॉलर कंस्ट्रक्टर तक पहुंच सकता है:

 public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

यह एक अधिक जटिल उदाहरण है, इसलिए इसे समझने का ध्यान रखें:

  • वर्ग अमूर्त नहीं है, इसलिए इसे तत्काल करना संभव है।
  • कंस्ट्रक्टर निजी है इसलिए केवल यह वर्ग ही एक नया उदाहरण बना सकता है।
  • एक स्थिर संपत्ति और विधि के माध्यम से, वर्ग कॉल करने वालों के लिए अपने आप में एक एकल, अद्वितीय उदाहरण को उजागर करता है।

ऑब्जेक्ट बनाने के लिए जावा में कंस्ट्रक्टर्स का उपयोग करें

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए कंस्ट्रक्टर महत्वपूर्ण हैं। वे आपको वस्तुओं को बनाने की अनुमति देते हैं, जो आवश्यक है!

जावा में, कंस्ट्रक्टर अन्य तरीकों की तरह दिखते हैं और उसी तरह से काम करते हैं। आपको डिफॉल्ट कंस्ट्रक्टर्स, ओवरलोडिंग और कंस्ट्रक्टर चेनिंग के विशेष नियमों को याद रखना चाहिए। यदि कंस्ट्रक्टर आपके लिए नए हैं, तो हो सकता है कि आप अन्य मुख्य जावा अवधारणाओं को पढ़ना चाहें जिन्हें आपको प्रारंभ करते समय सीखना चाहिए।