जावा 1.1 भाषा विशिष्टता यह बताता है कि एक प्रकार है जो एक वर्ग के सदस्य है, जब के लिए जावा 1.0 कोड में तब्दील हो के नाम जावा आभासी मशीन bytecodes के उद्देश्य से, भीतरी वर्ग की पूरी तरह से योग्य नाम के होते हैं कि प्रत्येक .' character following a class name is replaced by a
$ 'को छोड़कर। इसके अलावा, प्रत्येक आंतरिक वर्ग कन्स्ट्रक्टर को एक अनुमानित तर्क में संलग्न उदाहरण प्राप्त होता है।
public class FixedStack {
... (the methods omitted here are unchanged)
public java.util.Enumeration elements() {
return new FixedStack$Enumerator(this);
}
}
class FixedStack$Enumerator implements java.util.Enumeration {
private FixedStack this$0; // saved copy of FixedStack.this
FixedStack$Enumerator(FixedStack this$0) {
this.this$0 = this$0;
this.count = this$0.top;
}
int count;
public boolean hasMoreElements() {
return count > 0;
}
public Object nextElement() {
if (count == 0)
throw new NoSuchElementException("FixedStack");
return this$0.array[--count];
}
}
किसी को भी जो पहले से ही जावा या सी ++ अनुकूलक वर्गों के साथ प्रोग्राम किया गया है लिखा है इस के समान कोड, सिवाय इसके कि लिंक चर मैन्युअल परिभाषित किया जाना चाहिए और स्पष्ट रूप से: यहाँ FixedStack उदाहरण के तब्दील स्रोत कोड कैसे दिखाई दे सकती है शीर्ष-स्तरीय एडाप्टर कक्षाओं में प्रारंभ किया गया, जबकि जावा 1.1 कंपाइलर उन्हें आंतरिक कक्षाओं के लिए स्वचालित रूप से बनाता है।
जब गणनाकर्ता को संलग्न उदाहरण के शीर्ष या सरणी फ़ील्ड को संदर्भित करने की आवश्यकता होती है, तो यह $ 0 नामक एक निजी लिंक के माध्यम से अप्रत्यक्ष हो जाती है। इस नाम की वर्तनी जावा कक्षा में आंतरिक कक्षाओं के परिवर्तन का एक अनिवार्य हिस्सा है, ताकि डीबगर्स और इसी तरह के टूल आसानी से ऐसे लिंक पहचान सकें। (अधिकांश प्रोग्रामर खुशी से ऐसे नामों से अनजान हैं।)
(नोट: जावा 1.1 के कुछ कार्यान्वयन में एक सीमा है, जिसके अंतर्गत इस $ 0 की शुरुआत किसी भी सुपरक्लास निर्माता के चलने तक देरी हो रही है। इसका मतलब है कि ऊपर स्तर के एक उपवर्ग विधि द्वारा किए गए संदर्भों असफल विधि सुपर क्लास निर्माता द्वारा निष्पादित की जाने होता है अगर सकते हैं।)
स्रोत
2014-11-26 10:19:30