2013-02-25 9 views
5

की एक सरणी बनाएँ अगर मैं एक वर्ग है एक का कहना है कि, और मैं के रूप में इस वर्ग के 10 तत्वों की एक सरणी की घोषणा,संदर्भ

A [] arr=new A[10];

फिर एक के 10 नई वस्तुओं बनाया है और में जमा हो जाती सरणी।

हालांकि, मैं A arr[10]; की लाइनों पर कुछ करने में सक्षम होना चाहता हूं, जहां सरणी केवल शून्य वस्तुओं के संदर्भ रखती है।

कारण मुझे इसकी आवश्यकता है क्योंकि मुझे केवल कोड में बाद में भरने वाले उदाहरणों को पकड़ने के लिए सरणी की आवश्यकता है। तो ऊपर दिए गए कथन की वस्तुएं वैसे भी खो जाती हैं और जैसा कि मैं समझता हूं कि वस्तु निर्माण महंगा है।

तो, क्या ऐसे संदर्भों की एक श्रृंखला है जो मैं बाद में इच्छित वस्तुओं को इंगित कर सकता हूं? या यह संभव नहीं है और मुझे ArrayList का उपयोग करना चाहिए?

उत्तर

12

अगर मैं एक वर्ग है A कहते हैं, और मैं के रूप में इस वर्ग के 10 तत्वों की एक सरणी,

A [] arr=new A[10]; 

फिर एक के 10 नई वस्तुओं बनाया है और सरणी में जमा हो जाती है की घोषणा।

यह सही नहीं है। यहां, दस संदर्भों की एक सरणी बनाई गई है, और प्रत्येक संदर्भ null पर सेट हो जाता है। इस कोड द्वारा बनाए गए A के कोई उदाहरण नहीं हैं।

दूसरे शब्दों में, कोड पहले से ही वही करता है जो आप करना चाहते हैं।

+2

@akashasia केवल एक वस्तु बनाई गई है, सरणी स्वयं ही है। –

+0

तो मैं सब के बाद स्मृति बर्बाद नहीं कर रहा हूँ? जानकार अच्छा लगा। नए कीवर्ड को देखते हुए मैंने माना कि वस्तुओं का निर्माण किया जा रहा था। धन्यवाद :) – Akash

+0

@TheodorosChatzigiannakis आह जो समझ में आता है। अंतर्दृष्टि के लिए धन्यवाद। – Akash

4

यदि आप A [] arr=new A[10]; करते हैं तो आपके सरणी को छोड़कर कोई ऑब्जेक्ट नहीं बनाया जाता है, प्रत्येक फ़ील्ड null होगा जब तक आप इसे प्रारंभ नहीं करते।

A [] arr=new A[10]; केवल A क्लास ऑब्जेक्ट के संदर्भ को संग्रहीत करने के लिए जगह बनाएं। हालांकि सरणी arr बनाई गई है लेकिन यह किसी ऑब्जेक्ट का संदर्भ नहीं दे रही है और आप arr[i].someMethod() की तरह नहीं कर सकते हैं।

इसे सही करने के लिए, सरणी में अलग-अलग स्मृति में वस्तु का आवंटन इस तरह कार्य करें:

A [] arr=new A[10]; 
arr[0] = new A(); 
arr[1] = new A(); 
: 
: 

या में एक पाश की तरह:

for(i=0; i<10; i++){ 
     arr[i] = new A(); 
    } 

वहाँ arr कि संदर्भ की एक सरणी होने के बाद, संदर्भित करता है वैध ए क्लास ऑब्जेक्ट के लिए। और इस अभिव्यक्ति के बाद arr[i].someMethod() कोई त्रुटि नहीं होगी।

+1

मैंने आपके उत्तर में जोड़ा। यदि आप पसंद नहीं करते हैं तो आप वापस वापस कर सकते हैं। –

1

JLS Kinds of Variables: से

सरणी घटकों अज्ञात चर बनाया है और प्रारंभ कर रहे हैं कि मूलभूत मूल्यों (§4.12.5) कर रहे हैं जब भी कोई नई वस्तु है कि एक सरणी बनाई गई है (§10, §15.10)। सरणी घटक अब प्रभावी रूप से समाप्त नहीं होते हैं जब सरणी का संदर्भ नहीं दिया जाता है।

और 4.12.5. Initial Values of Variables

सभी संदर्भ प्रकार के लिए से (§4.3), डिफ़ॉल्ट मान अशक्त है।

तो तुम कहते हैं:

अगर मैं एक वर्ग है एक का कहना है कि, और मैं के रूप में इस वर्ग के 10 तत्वों, की एक सरणी की घोषणा
एक [] आगमन = नया एक [10] ;
फिर ए की 10 नई वस्तुओं को सरणी में बनाया और संग्रहीत किया जाता है।

यह सही नहीं है। लेकिन आप जो चाहते हैं वह सही है।

तो, क्या ऐसे संदर्भों की एक श्रृंखला है जो मैं बाद में इच्छित वस्तुओं को इंगित कर सकता हूं?