2013-05-25 4 views
6

मैं जैसे कि "alexei.ATable $ IndexOfATable.access $ 1400 (ATable.java:80) पर"

और मैं दिलचस्प हूँ, क्या संख्या 1400 एक ढेर में एक स्ट्रिंग, मिल गया है? इनर क्लास इंडेक्सऑफटेबल में केवल 3 फ़ील्ड हैं, 1400 नहीं हैं।

Intresting, संख्या 1400 इतनी बड़ी क्यों है?

debug: 
Exception in thread "main" java.lang.NullPointerException 
    at alexei.ATable$IndexOfATable.compareTwoRows(ATable.java:181) 
    at alexei.ATable$IndexOfATable.access$1400(ATable.java:80) 
    at alexei.ATable.updateIndex(ATable.java:501) 
    at alexei.ATable.addRow(ATable.java:361) 
    at learn.Base.main(Base.java:18) 
Java Result: 1 
+1

'.. $ 1400' एक विशेष पहचानकर्ता का हिस्सा है - उनमें '$' के साथ पहचानकर्ता * सामान्य रूप से * एक कंपाइलर/उपकरण (जावा में अज्ञात कक्षाओं सहित) द्वारा उत्पन्न होते हैं। इसे किसी सूचकांक या आकार से संबंधित नहीं होना चाहिए। देखें [यह उत्तर] (http://stackoverflow.com/a/4636669/2246674) "सामान्यतः" का अर्थ क्या है। – user2246674

+0

मुझे एहसास हुआ है, वे चरण 100 द्वारा गिने गए हैं: $ 000 तक पहुंचें, $ 100 तक पहुंचें, $ 200 तक पहुंचें और इसी तरह – Dumas45

उत्तर

15

यह एक सिंथेटिक विधि है जो संकलक आंतरिक कक्षा से निपटने के लिए उत्पन्न करता है। जावा बाइटकोड में एक आंतरिक वर्ग की अवधारणा नहीं है, इसलिए जब इसे संकलित किया जाता है तो यह रनटाइम पर एक की उपस्थिति को "नकली" करने के लिए विभिन्न चाल करता है। इस विशेष मामले में, access$XXX विधियों की कक्षा आम तौर पर बाहरी कक्षा से बाहरी वर्ग का संदर्भ प्रदान करने के साथ जुड़ी होती है। इस तरह के सिंथेटिक इकाइयां इसके संकेत हैं। (आप आमतौर पर कक्षा/विधि नाम में एक डॉलर की उपस्थिति से उन्हें खोज सकते हैं।)

संख्या 1400 इतनी बड़ी क्यों है? कुछ भी

यह जब तक यह आवेदन के भीतर अद्वितीय है के रूप में एक विशुद्ध रूप से मनमाना पहचानकर्ता है कि केवल संकलक के बारे में पता करने की जरूरत है है (और इस प्रकार चुनता है।), यह हो सकता है (तकनीकी रूप से बोल रहा है, तो यह और भी हो सकता है की जरूरत नहीं है एक संख्या।)

जहां समस्या निहित है, शीर्ष शीर्ष स्टैक ट्रेस द्वारा दी गई रेखा पर एक नज़र डालें: ATable.java:181

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