1. वस्तु बनाना

ठीक है, हम वस्तुओं का निर्माण कर चुके हैं। आप पहले भी इसका सामना कर चुके हैं, लेकिन अब हम इस विषय का अधिक विस्तार से विश्लेषण करेंगे। वस्तुओं को बनाना वास्तव में बहुत आसान है।

ऑब्जेक्ट बनाने के लिए, आपको नए ऑपरेटर का उपयोग करने की आवश्यकता है। ऑब्जेक्ट बनाना लगभग इस तरह दिखता है:

new Class(arguments)

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

Class name = new Class(arguments)

जहां एक नए चर का निर्माण होता है, और बराबर चिह्न के दाईं ओर का कोड एक नई वस्तु का निर्माण होता है जिसका प्रकार है ।Class nameClass

उदाहरण:

कोड टिप्पणी
Object o = new Object();
Objectएक वस्तु बनाएँ
Cat pet = new Cat();
Catएक वस्तु बनाएँ
Scanner console = new Scanner(System.in)
Scannerएक वस्तु बनाएँ

प्रोग्रामर अक्सर अपनी कक्षाओं के बाद चर का नाम देते हैं, लेकिन एक छोटे अक्षर के साथ। नौसिखिए प्रोग्रामर के लिए, ऐसा कोड भ्रामक हो सकता है:

कोड
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

इस कोड में कुछ भी गलत नहीं है - यह सबसे सामान्य कोड है, जिसमें एक वेरिएबल बनाया जाता है और फिर उसी प्रकार के ऑब्जेक्ट द्वारा तुरंत इनिशियलाइज़ किया जाता है।

बराबर चिह्न के बाईं ओर हमारे पास एक चर का निर्माण होता है। दाईं ओर, किसी वस्तु का निर्माण। इतना ही।

2. कंस्ट्रक्टर

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

यहाँ भी सब कुछ सरल है: प्रत्येक वर्ग की एक विशेष विधि (या विधियाँ) होती हैं जो किसी वस्तु को बनाते समय पारित किए गए तर्कों को संभालने के लिए जिम्मेदार होती हैं। इन विधियों को कंस्ट्रक्टर कहा जाता है । या जब हम सिर्फ एक के बारे में बात कर रहे हैं: कंस्ट्रक्टर

कन्स्ट्रक्टर विधि को नियमित विधि से अलग करना आसान है। इस पद्धति की दो विशिष्ट विशेषताएं हैं:

  • एक कंस्ट्रक्टर का नाम उसके वर्ग के नाम के समान है (और एक बड़े अक्षर से शुरू होता है)
  • कंस्ट्रक्टर का कोई रिटर्न प्रकार नहीं है।

सामान्य तौर पर, यह आमतौर पर ऐसा दिखता है:

modifiers Class(arguments)
{
   Code
}

उदाहरण:

कोड टिप्पणी
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
Pointक्लास




Pointक्लास कंस्ट्रक्टर
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




वर्ग का एक वस्तु बनाएँ Point। क्लास कंस्ट्रक्टर को बुलाया जाएगा।

ध्यान दें कि कंस्ट्रक्टर कैसा दिखता है: इसका कोई रिटर्न टाइप नहीं है और इसका नाम क्लास के नाम के समान है।

और एक और बात: कंस्ट्रक्टर के अंदर कोड पर एक नज़र डालें। कंस्ट्रक्टर के मापदंडों के नाम वर्ग के क्षेत्रों के समान हैं: x और y। उपन्यास पैरामीटर नाम बनाने से बचने के लिए यह मानक अभ्यास है। नाम वर्ग के क्षेत्रों के समान ही हैं। इस कीवर्ड का उपयोग करके नाम विरोध का समाधान किया जाता है।

3. कंस्ट्रक्टर को कॉल करना

नया ऑब्जेक्ट बनाने के लिए नए ऑपरेटर और "नई कक्षा ( तर्क )" जैसी कमांड का उपयोग करते समय , दो चीजें होती हैं:

  • जावा मशीन एक ऑब्जेक्ट बनाती है जिसका प्रकार क्लास है
  • जावा मशीन ऑब्जेक्ट के कन्स्ट्रक्टर को कॉल करती है और आपके तर्कों में गुजरती है

एक प्रोग्रामर के रूप में, आपको यह तय करना है कि आपकी कक्षा में कौन से कंस्ट्रक्टर होने चाहिए और इन कंस्ट्रक्टर के पास कौन से पैरामीटर होने चाहिए।

मान लीजिए कि आप किसी पशु आश्रय स्थल पर बिल्लियों पर नज़र रखने के लिए एक कक्षा बनाने का निर्णय लेते हैं। तो आपकी Catकक्षा इस तरह दिख सकती है:

class Cat
{
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
}
Cat cat = new Cat("Whiskers", 2);
इसकी अनुमति है
Cat cat = new Cat("Whiskers");
लेकिन इसकी अनुमति नहीं है यह कोड संकलित नहीं होगा।
Cat cat = new Cat();
और इसकी अनुमति नहीं है। यह कोड संकलित नहीं होगा।

कक्षा Catमें नाम और उम्र के मापदंडों के साथ सिर्फ एक कंस्ट्रक्टर है। क्योंकि कोई अन्य कंस्ट्रक्टर नहीं हैं, आपको ऑब्जेक्ट बनाते समय तर्क के रूप में बिल्ली का नाम ( name) और उम्र ( ) पास करनी होगी। ageकंस्ट्रक्टर को तर्क पास करना वैकल्पिक नहीं है ।

4. एकाधिक निर्माता

लेकिन अगर आपको जरूरत है, तो आप कक्षा में कई कंस्ट्रक्टर जोड़ सकते हैं। कंस्ट्रक्टर या उनके पैरामीटर की संख्या की कोई सीमा नहीं है। जब आप कोई ऑब्जेक्ट बनाते हैं, तो कंपाइलर स्वचालित रूप से पैरामीटर से मेल खाने वाले कन्स्ट्रक्टर का चयन करता है

कोड टिप्पणी
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
   public Cat(String name)
   {
      this.name = name;
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
इसकी अनुमति है: पहले कंस्ट्रक्टर को बुलाया जाएगा
Cat cat = new Cat("Whiskers");
इसकी अनुमति है: दूसरे कंस्ट्रक्टर को बुलाया जाएगा
Cat cat = new Cat();
लेकिन इसकी अनुमति नहीं है यह कोड संकलित नहीं होगा।

हमने इस तथ्य पर ध्यान देने का फैसला किया कि बिल्ली की उम्र ज्ञात नहीं हो सकती है। इस मामले को संभालने के लिए, हमने एक कंस्ट्रक्टर के साथ विशेष स्थिरांक जोड़ा, UNKNOWNजिसमें सिर्फ एक पैरामीटर है - बिल्ली का नाम।

ध्यान दें कि हम अभी भी दोनों कंस्ट्रक्टर के अंदर दोनों वेरिएबल्स को इनिशियलाइज़ करते हैं। हम अज्ञात/अनुपलब्ध पैरामीटरों को स्थिरांक से प्रतिस्थापित करते हैं UNKNOWN

यदि आयु चर के लिए कोई मान निर्दिष्ट नहीं किया गया है, तो इसका डिफ़ॉल्ट मान 0 होगा। आखिरकार, सड़क पर पाया जाने वाला बिल्ली का बच्चा 0 पूर्ण वर्ष हो सकता है। इसका अर्थ है कि आयु चर में शून्य का अर्थ "अज्ञात आयु" नहीं है।

5. डिफ़ॉल्ट कंस्ट्रक्टर

यदि आप चाहते हैं कि आपकी वस्तुओं को बिना किसी पैरामीटर के तत्काल किया जाए, तो आपकी कक्षा को नो-तर्क निर्माता घोषित करने की आवश्यकता है।

पैरामीटर के बिना एक कंस्ट्रक्टर आवश्यक रूप से कोड के बिना एक कंस्ट्रक्टर नहीं है। ऐसे कन्स्ट्रक्टर में कोड हो सकता है जो शुरुआती मानों के साथ चर प्रारंभ करता है:

कोड टिप्पणी
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }

   public Cat()
   {
      this.name = "Nameless";
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
इसकी अनुमति है: पहले कंस्ट्रक्टर को बुलाया जाएगा
Cat cat = new Cat();
इसकी अनुमति है: दूसरे कंस्ट्रक्टर को बुलाया जाएगा

डिफ़ॉल्ट कंस्ट्रक्टर

एक बहुत ही महत्वपूर्ण बात है जिसे आपको जानना और याद रखना चाहिए।

यदि आपकी कक्षा एक कंस्ट्रक्टर नहीं घोषित करती है, तो कंपाइलर एक डिफ़ॉल्ट कंस्ट्रक्टर जोड़ देगा, जो कि सार्वजनिक संशोधक के साथ एक नो-तर्क कंस्ट्रक्टर है।

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

कोड टिप्पणी
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
इसकी अनुमति है: डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल किया जाएगा