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. कन्स्ट्रक्टरला कॉल करणे

नवीन ऑब्जेक्ट तयार करण्यासाठी नवीन ऑपरेटर आणि "नवीन वर्ग ( वितर्क )" सारखी कमांड वापरताना , दोन गोष्टी घडतात:

  • Java मशीन एक ऑब्जेक्ट तयार करते ज्याचा प्रकार क्लास आहे
  • Java मशीन ऑब्जेक्टच्या कन्स्ट्रक्टरला कॉल करते आणि तुमच्या युक्तिवादांमध्ये पास होते

प्रोग्रामर म्हणून, तुमच्या वर्गात कोणते कन्स्ट्रक्टर असावेत आणि या कन्स्ट्रक्टरकडे कोणते पॅरामीटर्स असावेत हे तुम्ही ठरवू शकता.

समजा तुम्ही प्राणी निवारा येथे मांजरींचा मागोवा ठेवण्यासाठी वर्ग तयार करण्याचे ठरवले आहे. मग तुमचा 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();
हे अनुमत आहे: डीफॉल्ट कन्स्ट्रक्टरला कॉल केला जाईल