2013-03-26 3 views
79

मैंने अभी जावा सीखना शुरू कर दिया।वास्तव में इस जावा कोड में अंडरस्कोर क्या कर रहा है?

मेरा दोस्त जो मुझे अध्ययन करने में मदद कर रहा है, उसने मुझे यह भेजा और कहा 'इसे समझो'।

दुर्भाग्य से मैं इसे पढ़ने में असमर्थ हूं। यह मुझे पर्ल की तरह दिखता है।

class _{_ _;_(){_=this;}} 

इसका क्या अर्थ है?

+17

इस प्रश्न पर चर्चा की जा रही है [मेटा पर] (http://meta.stackexchange.com/questions/173714/can-we-nuke-this-too-localized-question)। चलिए इसे बंद करने/हटाने के लिए या इसके खिलाफ तर्क लेते हैं। –

+63

@anotherordinary आपको शायद अपने मित्र को प्रोग्रामिंग शिक्षक के रूप में कुचलना चाहिए यदि उसने आपको यह समझने के लिए कहा कि यह इस भाषा को सीखने का एक अच्छा तरीका होगा। अपरिवर्तनीय ट्रिविया को याद रखना बिल्कुल उपयोगी नहीं है। जब आप एक भाषा सीखना शुरू कर रहे हैं तो बहुत कम। –

+2

@ एनोनोशियोजी ग्रेट प्वाइंट। "अप्रासंगिक"। माफ़ कीजिये। –

उत्तर

151

_ कक्षा का नाम है। यह एक बहुत भ्रमित है, लेकिन यह काम करता है!

वर्ग का नाम बदलकर साथ

:

class Something {Something something;Something(){something=this;}} 

और साफ:

class Something { 
    Something something; 
    Something() { 
     something=this; 
    } 
} 

और आप इस अजीब नामकरण :)

class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__=___;}} 

वास्तव में साथ पागल जा सकते हैं, यूनिकोड भी है समर्थित है, इसलिए यह मान्य है:

class 合法類別名稱{合法類別名稱(){}} 
+29

मुझे व्यक्तिगत रूप से @ एल्विन के संपादन से प्यार है :) –

+3

आपके 'पागल हो' उदाहरण में कुछ गलतियां हैं। (1) आप '____ = __' (दो बार), (2) के बाद अर्धविराम जोड़ना भूल गए हैं, यदि आप '_' विधि को अधिभारित करने का प्रयास कर रहे हैं तो आपको टाइप भी पास करना होगा ताकि' _ (___) '' होना चाहिए (_ ___) '। यहां बताया गया है कि यह 'वर्ग _ {_ __; _ ____; _() {__ = यह; ____ = __;} _ (_ ___) {__ = ___;}} 'देख सकता है। एक मिनट रुकिए। क्या मैंने अभी अंडरस्कोर डीबग किया था? यह ब्रेक के लिए समय है। – Pshemo

+0

@Pshemo Lol, मैं वास्तव में उस कोड के बारे में गंभीर होने का मतलब नहीं था: पी निश्चित – Doorknob

69

_, वर्ग के नाम है को रेखांकित किया गया है एक वैध जावा चर नाम, तो आप सिर्फ यह deobfuscate करने के लिए अपने कोड को इंडेंट करने की जरूरत है:

class _{ 
    _ _; 
    _(){ 
    _=this; 
    } 
} 

तरह:

class A{ 
    A A; 
    A(){ 
    A=this; 
    } 
} 

संपादित करें: @ डैनियल फिशर

टाइप नाम और चर नाम एमएस के पास अलग-अलग नामस्थान हैं। और उदाहरण के लिए कोड class FOO { FOO FOO; } जावा में मान्य है।

सारांश

  • _class _{
  • _ पर एक वर्ग के नाम, उदा है _ _; पर एक वर्ग के सदस्य नाम, उदा, और _=this
  • _ है एक निर्माता नाम उदा है _()

पर याद रखें: जावा six different namespaces:

  • पैकेज का नाम,
  • प्रकार के नाम,
  • क्षेत्र (चर) के नाम,
  • विधि के नाम,
  • स्थानीय चर का उपयोग करता है नाम (पैरामीटर सहित), और
  • लेबल।

इसके अलावा, प्रत्येक घोषित enum का अपना नामस्थान है। विभिन्न प्रकार के समान नाम संघर्ष नहीं करते हैं; उदाहरण के लिए, एक विधि को स्थानीय चर के समान नाम दिया जा सकता है।

+3

कोई गलती नहीं है। जैसा कि मैंने टाइप किया है, यह ठीक है। मैं अभी तक इसे समझ में नहीं आया। –

+2

@GrijeshChauhan प्रकार के नाम और चर नामों के अलग-अलग नामस्थान हैं। 'वर्ग खाद्य {खाद्य भोजन; } 'काम करता है। –

+0

@DanielFischer धन्यवाद..यह जावा में केवल ** है ** ** .. कोई अन्य भाषा यह करती है? –

10

अच्छी तरह से यह अच्छा उदाहरण है। जावा यूनिकोड पहचानकर्ता ताकि आप की तरह कुछ लिख सकते हैं होने के लिए अनुमति देता है:

class ⲥlass { 
ⲥlass claѕѕ; 
} 
यहाँ

वर्ग के नाम की सी है 'ⲥ' (U + 2CA5 कॉप्टिक छोटे अक्षर SMB) और

ऑब्जेक्ट नाम की 'ѕ' (U + 0455 साइरिलिक लघु पत्र डीजेई)।

+0

आपके पास 'class' नामक एक चर नहीं हो सकता है, यह एक कीवर्ड है। – nickb

+12

@nickb: यह जावा कीवर्ड 'क्लास' नहीं है। जैसा कि मैंने उल्लेख किया है कि ऑब्जेक्ट का नाम 'क्लास' में 'एस' है जो गैर असीमित वर्ण हैं। तो वास्तव में ऑब्जेक्ट का नाम 'क्लास' है 'cla \ u0455 \ u0455' 'मुझे लगता है कि यह गलतफहमी को साफ़ करता है। :) – ashgkwd

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