2014-11-26 13 views
15

इस कोड में "हूँ.यह $ 0" का अर्थ क्या है? इसके लिए क्या खड़ा है? मैं जानता हूँ कि क्यों हम का उपयोग "इस" लेकिन मैं के बारे में पता नहीं है "हूँ.यह $ 0"

class MainActivity$1 implements TextWatcher 
{ 
    public void afterTextChanged(Editable paramEditable) 
    { 
    } 

    public void beforeTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) 
    { 
    } 

    public void onTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) 
    { 
    this.this$0.ChangeToNumber(paramCharSequence.toString()); 
    } 
} 
-----------------------or ---------------------- 
class MainActivity$2 implements View.OnClickListener 
{ 
    public void onClick(View paramView) 
    { 
    this.this$0.startActivity(new Intent(this.this$0, about.class)); 
    } 
} 

उत्तर

14

हूँ.यह $ 0 यह Main.access $ 0 ये रहस्यमय प्रतीकों आमतौर पर गुमनाम इनर क्लासों के अनुरूप करने के लिए ही है। जावा वीएम उनके बारे में नहीं जानता, केवल शीर्ष-स्तरीय कक्षाओं के बारे में, इसलिए जावा कंपाइलर आंतरिक कक्षाओं को काम करने के लिए कई कामकाज प्रदान करता है।

स्थानीय वर्ग के पास अपनी संलग्न कक्षा के उदाहरण के संदर्भ में अंतर्निहित संदर्भ है, 'यह $ 0' इस संदर्भ के अनुरूप संकुचित कोड में मेल खाता है। JVM तो संकलक उदाहरण enclosing के निजी तरीकों पर पहुंचने के लिए पहुँच $ 0 जैसे कई कृत्रिम पैकेज-निजी तरीकों उत्पन्न करता है अन्य वर्गों की साधारण सैनिक तरीकों को एक्सेस करने से कक्षाओं से बचाता है।

जावा भाषा की कई अन्य विशेषताएं हैं जो जेनेरिक और कॉन्वेंटेट रिटर्न प्रकारों जैसे कृत्रिम तरीकों के साथ कार्यान्वित की जाती हैं। Decoding Decompiled Source Code For Android

और:

मैं तुम्हें उन लिंक्स की जाँच करने के लिए सुझाव Performance Tips

3

वहाँ एक उदाहरण सदस्य this$0 बुलाया होने और उसके बाद यह जिक्र से कुछ भी नहीं रोक (सभ्य नामकरण सम्मेलनों के बगल में) है this कीवर्ड के साथ।

उदाहरण के लिए:

public class SomeClass 
{ 
    int this$0; 
    public SomeClass (int val) 
    { 
     this.this$0 = val; 
    } 
} 
2

जावा 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 की शुरुआत किसी भी सुपरक्लास निर्माता के चलने तक देरी हो रही है। इसका मतलब है कि ऊपर स्तर के एक उपवर्ग विधि द्वारा किए गए संदर्भों असफल विधि सुपर क्लास निर्माता द्वारा निष्पादित की जाने होता है अगर सकते हैं।)

संबंधित मुद्दे