हॅलो, अमिगो! मी तुम्हाला व्हेरिएबल्सच्या अंतर्गत संरचनेबद्दल सांगू इच्छितो. तुम्हाला आधीच माहित आहे की, प्रत्येक व्हेरिएबल मेमरीच्या क्षेत्राशी संबंधित आहे जेथे त्याचे मूल्य संग्रहित केले जाते. "

"हो. तू मला त्याबद्दल मागच्या वेळी सांगितलेस."

"छान. तुला आठवलं हे चांगलं. मी पुढे जाईन."

"सर्व संमिश्र प्रकारांमध्ये सोप्या प्रकारांचा समावेश असतो. आणि त्यांच्या बदल्यात, त्याहूनही सोप्या प्रकारांचा समावेश होतो. शेवटी, आम्ही आदिम प्रकारांसह संपतो , ज्याला आणखी सरलीकृत करता येत नाही. त्यालाच ते म्हणतात - आदिम प्रकार . कारण उदाहरणार्थ, int हा एक आदिम प्रकार आहे, परंतु स्ट्रिंग हा एक संमिश्र प्रकार आहे जो त्याचा डेटा वर्णांची सारणी म्हणून संग्रहित करतो (जेथे प्रत्येक वर्ण हा आदिम प्रकार char आहे )."

"खूप इंटरेस्टिंग. पुढे जा."

"संमिश्र प्रकार साध्या प्रकारांचे गट करून तयार होतात. आम्ही अशा प्रकारांना वर्ग म्हणतो . जेव्हा आम्ही प्रोग्राममध्ये नवीन वर्ग परिभाषित करतो, तेव्हा आम्ही नवीन संमिश्र डेटा प्रकार घोषित करतो . त्याचा डेटा एकतर इतर संमिश्र प्रकार किंवा आदिम प्रकार असेल."

जावा कोड वर्णन
public class Person
{
   String name;
   int age;
}
नवीन संमिश्र प्रकार घोषित केला आहे - Person. त्याचा डेटा (संमिश्र प्रकार) व्हेरिएबल आणि (आदिम प्रकार) व्हेरिएबलमध्ये
संग्रहित केला जातोStringnameintage
public class Rectangle
{
   int x, y, width, height;
}
नवीन संमिश्र प्रकार घोषित केला आहे - Rectangle.
यात चार int(आदिम प्रकार) चल असतात.
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
नवीन संमिश्र प्रकार घोषित केला आहे - Cat. यात खालील चल आहेत:
owner, संमिश्र प्रकार Person
territory, संमिश्र प्रकार Rectangle
age, आदिम प्रकार int
name, संमिश्र प्रकारString

"आता, सर्वकाही स्पष्ट आहे, जरी ते कितीही विचित्र वाटेल."

"मोठ्या (संमिश्र) प्रकारांमध्ये अनेक लहान (आदिम) प्रकार असतात. म्हणूनच या प्रकारच्या वस्तू खूप मेमरी घेतात - आदिम प्रकारांच्या व्हेरिएबल्सपेक्षा अधिक. कधीकधी बरेच काही. अशा व्हेरिएबल्ससह असाइनमेंट ऑपरेशन्स पार पाडण्यासाठी बराच वेळ लागतो. वेळ आणि मेमरीच्या मोठ्या भागांची कॉपी करणे आवश्यक आहे. म्हणूनच संमिश्र प्रकारांचे व्हेरिएबल्स ऑब्जेक्ट स्वतःच संग्रहित करत नाहीत, तर फक्त त्याचा संदर्भ, म्हणजे त्याचा चार-बाइट पत्ता. अशा ऑब्जेक्ट्समधील डेटा संबोधित करण्यासाठी हे पुरेसे आहे. जावा मशीन सर्व संबंधित गुंतागुंत हाताळते."

"मला त्यातले काही समजले नाही."

"आम्ही याआधी सांगितले आहे की व्हेरिएबल हे बॉक्ससारखे असते. जर तुम्हाला त्यात 13 हा अंक ठेवायचा असेल, तर तुम्ही कागदाच्या तुकड्यावर 13 लिहून बॉक्समध्ये ठेवू शकता."

"परंतु कल्पना करा की तुम्हाला बॉक्समध्ये (व्हेरिएबल) काहीतरी मोठे ठेवण्याची आवश्यकता आहे. उदाहरणार्थ, कुत्रा, कार किंवा तुमचा शेजारी. बॉक्समध्ये न पुश करण्यायोग्य गोष्टी ढकलण्याचा प्रयत्न करण्याऐवजी, तुम्ही काहीतरी सोपे करू शकता: फोटो वापरा खर्‍या कुत्र्याऐवजी कुत्र्याचा, खर्‍या कारऐवजी लायसन्स प्लेट किंवा तुमच्या शेजाऱ्याऐवजी तुमच्या शेजाऱ्याचा फोन नंबर.

"आम्ही कागदाचा तुकडा घेतो आणि शेजाऱ्याचा फोन नंबर लिहितो. हे एखाद्या वस्तूच्या संदर्भासारखे आहे. जर आपण कागदाचा तुकडा शेजारच्या फोन नंबरसह कॉपी केला आणि तो अनेक बॉक्समध्ये ठेवला, तर आता आणखी संदर्भ आहेत. तुमच्या शेजाऱ्याला. पण, पूर्वीप्रमाणे, तुमचा अजूनही एकच शेजारी आहे. याचा अर्थ आहे, नाही का?"

"अशा प्रकारे डेटा संचयित करण्याचे एक महत्त्वाचे वैशिष्ट्य म्हणजे आपल्याकडे एकाच वस्तूचे अनेक संदर्भ असू शकतात "

"किती मनोरंजक! मला ते जवळजवळ समजले आहे. मला आणखी एकदा सांगा, कृपया - जर मी संमिश्र प्रकाराचे व्हेरिएबल त्याच संमिश्र प्रकाराच्या दुसर्‍या व्हेरिएबलला नियुक्त केले तर काय होईल?"

"मग दोन व्हेरिएबल्स समान पत्ता संग्रहित करतील. याचा अर्थ असा की जर तुम्ही एका व्हेरिएबलद्वारे संदर्भित ऑब्जेक्टचा डेटा बदलला तर, तुम्ही दुसर्‍याद्वारे संदर्भित डेटा बदलता . दोन्ही व्हेरिएबल्स एकाच ऑब्जेक्टचा संदर्भ देतात . अर्थात, अनेक असू शकतात. इतर व्हेरिएबल्स जे त्याचे संदर्भ देखील संग्रहित करतात."

"संमिश्र (संदर्भ/वर्ग) प्रकारांचे व्हेरिएबल्स एखाद्या वस्तूचा संदर्भ धारण करत नसल्यास काय करतात? ते शक्य आहे का?"

"होय, अमिगो. तुम्ही तुमच्या प्रश्नाबाबत माझ्यापेक्षा पुढे आहात. ते शक्य आहे. जर संदर्भ (संमिश्र) प्रकारातील व्हेरिएबल एखाद्या वस्तूचा संदर्भ साठवत नसेल, तर ते 'नल' म्हणून ओळखल्या जाणार्‍या गोष्टी साठवते. संदर्भ'. मुळात, याचा अर्थ असा आहे की ते एखाद्या ऑब्जेक्टचा संदर्भ देते ज्याचा पत्ता 0 आहे. तथापि, Java मशीन कधीही या पत्त्यासह ऑब्जेक्ट्स तयार करत नाही, म्हणून त्याला नेहमी माहित असते की जर संदर्भ व्हेरिएबलमध्ये 0 असेल तर ते कोणत्याही ऑब्जेक्टकडे निर्देश करत नाही. ."

जावा कोड वर्णन
String s;
String s = null;
समतुल्य विधाने.
Person person;
person = new Person();
person = null;
आम्ही एक व्यक्ती व्हेरिएबल तयार करतो ज्याचे मूल्य शून्य आहे.
आम्ही त्यास नवीन तयार केलेल्या व्यक्ती ऑब्जेक्टचा पत्ता नियुक्त करतो.
आपण व्हेरिएबलला नल असाइन करतो.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
आम्ही कॅट ऑब्जेक्ट तयार करतो आणि त्याचा पत्ता व्हेरिएबल कॅटमध्ये संग्रहित करतो; cat.owner समान शून्य.
आम्ही cat.owner ला नव्याने तयार केलेल्या Person object च्या पत्त्याच्या बरोबरीने सेट करतो.
cat.owner.name अजूनही शून्य समान आहे.
आम्ही cat.owner.name "देव" सारखे सेट केले

"मी तुम्हाला बरोबर समजले का? व्हेरिएबल्स दोन प्रकारात विभागले गेले आहेत: आदिम प्रकार आणि संदर्भ प्रकार. आदिम प्रकार थेट मूल्ये संग्रहित करतात, तर संदर्भ प्रकार ऑब्जेक्टचा संदर्भ संग्रहित करतात. आदिम प्रकारांमध्ये int, char, boolean आणि इतर अनेक समाविष्ट आहेत. संदर्भ प्रकारांमध्ये इतर सर्व गोष्टींचा समावेश आहे. आम्ही ते तयार करण्यासाठी वर्ग वापरतो."

"तू अगदी बरोबर आहेस, माझ्या मुला."

"म्हणून, तुम्ही म्हणता की तुम्हाला सर्व काही समजले आहे. तुम्हाला तुमचे ज्ञान अधिक मजबूत करण्यात मदत करण्यासाठी येथे काही कार्ये आहेत."