लेकिन अगर आप एक नया उदाहरण हर बार जब आप एक संदर्भ चर के लिए कुछ आवंटित बनाने के लिए नहीं है। आप बस ऐसा भी कर सकते हैं उदा। इस:
MyClass foo, bar; // define two reference variables, foo and bar
foo = new MyClass(); // create a new object and assign a reference to it to foo
bar = foo; // now foo and bar point to the same object
या यहाँ तक कि:
MyClass foo = new MyClass(), bar = foo; // same, but shorter
नोट है कि जावा में, के रूप में सी ++ जैसे कुछ अन्य भाषाओं के लिए विरोध किया, तो आप आवंटित नहीं कर सकते हैं (की एक प्रति) एक चर में एक वास्तविक वस्तु। इसके बजाय, जावा ऑब्जेक्ट्स हमेशा उनके संदर्भों के माध्यम से उपयोग किए जाते हैं। जब कोई जावा में किसी ऑब्जेक्ट को "ऑब्जेक्ट को असाइन करना" या "ऑब्जेक्ट को पैरामीटर के रूप में पास करना" या "किसी ऑब्जेक्ट से ऑब्जेक्ट को वापस करने" के बारे में बोलता है, तो वे हमेशा वास्तव में क्या मतलब रखते हैं कि संदर्भ को असाइन करना या पास करना या वापस करना है वस्तु।
आपके कोड कॉल (और अक्सर करते हैं) के तरीके भी ऑब्जेक्ट्स के संदर्भ वापस कर सकते हैं।
private MyClass getSomeObject() {
// ...some code here...
}
आप इसे कहते हैं और इस तरह एक चर में संदर्भ यह रिटर्न बचत हो सकती है:
MyClass foo;
foo = getSomeObject();
या इस तरह:
MyClass foo = getSomeObject();
उदाहरण के लिए, यदि आपका वर्ग इस तरह की एक विधि था हम विधि घोषणा से बता सकते हैं कि getSomeObject()
हमेशा MyClass
उदाहरण (या null
) का संदर्भ वापस कर देगा, लेकिन जहां नहीं उदाहरण में वास्तव में आता है। यह पूरी तरह से निर्भर करता है कि getSomeObject()
विधि के अंदर कोड क्या करता है। कोड हर बार new MyClass()
के साथ के साथ एक नया MyClass
उदाहरण बना सकता है, और इसके संदर्भ में वापस आ सकता है, या यह हमेशा उसी ऑब्जेक्ट का संदर्भ वापस कर सकता है। या, ज़ाहिर है, यह कभी-कभी किसी नए ऑब्जेक्ट का संदर्भ वापस ले सकता है, और कभी-कभी पहले बनाए गए एक को।
ध्यान दें कि, यदि आप एक चर के लिए एक नया मान असाइन करते हैं, तो पहले जो भी चर है, उसे भुला दिया जाएगा। अगर भूल गए मान कुछ ऑब्जेक्ट का अंतिम संदर्भ होता है, तो उस ऑब्जेक्ट को जावा के कचरा कलेक्टर द्वारा ही नष्ट कर दिया जाएगा।
तो, उदाहरण के लिए, यह निश्चित रूप से है, जबकि संभव कुछ इस तरह करना है:
MyClass foo = new MyClass(); // create a new object and assign (a reference to) it to foo
foo = getSomeObject(); // forget the previous content of foo and replace it with whatever getSomeObject() returns
कि सामान्य रूप से कोई मतलब नहीं है, आप एक नया MyClass
उदाहरण बनाकर होगी के बाद से अभी तुरंत फेंक करने के लिए अपने केवल इसका संदर्भ लें और इसे किसी और चीज़ से बदलें।
new MyClass(); // create a new object and throw away(!) the reference to it
MyClass foo = getSomeObject(); // assign whatever getSomeObject() returns to foo
केवल समय है कि यहां तक कि दूर से कर सकता है अगर आप एक नया MyClass
उदाहरण बना सकते हैं और तुरंत यह कचरा एकत्र हो, उदा जाने के लिए चाहता था समझ में होगा: वास्तव में, कोड ऊपर बिल्कुल के बराबर है क्योंकि MyClass
कन्स्ट्रक्टर का कुछ साइड इफेक्ट था जिसे आप ट्रिगर करना चाहते थे। लेकिन चूंकि इसे आमतौर पर रचनाकारों के लिए गैर-तुच्छ दुष्प्रभाव (या अधिक आम तौर पर, नई वस्तु को स्थापित करने के अलावा कुछ भी करने के लिए) के लिए खराब शैली माना जाता है, इसलिए आपको सामान्य रूप से ऐसे कोड लिखने का कोई बहाना नहीं होना चाहिए।
आप कैसे जानते हैं कि कोई ऑब्जेक्ट पहले से ही बनाया गया है? – foobar5512
जब आप इसे संदर्भित करने का प्रयास करते हैं, तो यह शून्य होगा। आप इसे किसी चीज़ से देख सकते हैं (मेरे अपडेट का संदर्भ लें) – AedonEtLIRA
आपको यह जानकारी प्रलेखन - या अनुभव से प्राप्त होती है। उदाहरण के लिए प्रबंधक अक्सर सिंगलेट्स (या इसी तरह के समान) के रूप में उपयोग किए जाते हैं, इसलिए केवल एक उदाहरण है। इस प्रकार की कक्षाएं आप नहीं बनाते हैं, लेकिन ऑब्जेक्ट को पुनर्प्राप्त करने के लिए एक फ़ंक्शन है। –