2010-01-29 11 views
41

Java tutorial से:जावा में कक्षा शाब्दिक क्या है?

अंत में, वहाँ भी एक वर्ग शाब्दिक, एक प्रकार का नाम ले रही है और ".class" जोड़कर गठन कहा जाता शाब्दिक एक विशेष प्रकार का है, उदाहरण के लिए, String.class। यह ऑब्जेक्ट को संदर्भित करता है (टाइप Class) जो कि प्रकार का प्रतिनिधित्व करता है।

इस शाब्दिक को किस प्रकार का चर निर्दिष्ट किया जा सकता है?

यदि संभव हो तो कृपया एक छोटा सा उदाहरण दें। देखने के लिए

उत्तर

41
Class<String> c = String.class; 

बाहर चेक Javadoc for java.lang.Class क्या आप इन छोटे लोगों में से एक के साथ क्या कर सकते हैं - ज्यादातर प्रतिबिंब

2

से संबंधित उदाहरण में यह उस तरह someting है:

Class myClass = MyClass.class 

या

MyClass.class.getResourceAsStream("config.properties"); 
28

यह समझने के लिए, आपको समझना होगा कि स्ट्रिंग वर्ग कक्षा का एक उदाहरण (ऑब्जेक्ट) है। एक स्ट्रिंग शाब्दिक (उदाहरण के लिए "मैं एक स्ट्रिंग हूं।") एक संकेत है जो कक्षा स्ट्रिंग के एक उदाहरण (ऑब्जेक्ट) का प्रतिनिधित्व करता है, जबकि एक वर्ग शाब्दिक (उदाहरण के लिए हैशटेबल.क्लास) एक संकेत है जो कक्षा के उदाहरण का प्रतिनिधित्व करता है कक्षा

+1

अच्छा स्पष्टीकरण। –

+0

@shinkou स्ट्रिंग कक्षा कक्षा का एक उदाहरण (वस्तु) है। कैसे? यह होना चाहिए "स्ट्रिंग.क्लास क्लास क्लास का एक उदाहरण (ऑब्जेक्ट) है" है ना? – Ani

+0

@ एनी स्ट्रिंग स्वयं क्लास क्लास का एक उदाहरण भी है जिसे क्लास शाब्दिक स्ट्रिंग.क्लास असाइन किया गया है। 'स्ट्रिंग स्ट्र =' के बारे में सोचें, मैं एक स्ट्रिंग हूं "; ', जहां' str' को एक स्ट्रिंग अक्षर" असाइन किया गया है "मैं एक स्ट्रिंग हूं"। – shinkou

19

यहाँ अन्य अच्छा जवाब के लिए धन्यवाद, आप जानते हैं कि यह क्या है, लेकिन यहाँ एक विशिष्ट उपयोग उदाहरण है कि यह भी स्पष्ट कर सकता है है:

private static Logger log = Logger.getLogger(YourClassHere.class); 

कोड पता चलता है, यह एक लाइन जहां हम initialising रहे हैं एक लॉगिंग ढांचा (इस उदाहरण में, मैं org.apache.log4j पैकेज का उपयोग कर रहा हूं, लेकिन सिद्धांत अन्य ढांचे तक फैला हुआ है)। getLogger() विधि को कक्षा शाब्दिक की आवश्यकता होती है, इसलिए यह जानता है कि यह लॉगिंग क्या है (यानी वर्तमान ऑब्जेक्ट की कक्षा)।

+2

यह जावाडॉक्स या किसी अन्य परिभाषा को उद्धृत करने के बजाय लगभग 1000 गुना अधिक उपयोगी है; धन्यवाद! – Pureferret

3

शाब्दिक ही MyClass है। यदि आप MyClass.class लिखते हैं तो आपको क्लास ऑब्जेक्ट का संदर्भ मिलता है। यदि आप new MyClass() लिखते हैं, तो यह आपको MyClass.class द्वारा प्राप्त क्लास ऑब्जेक्ट का उदाहरण प्राप्त करने के लिए शाब्दिक का उपयोग करता है। उदाहरण से आपको myClassInstance.getClass() पर कॉल करके एक ही कक्षा वस्तु मिलती है।

मैं 100% निश्चित नहीं हूं, लेकिन शाब्दिक स्वयं को किसी भी चर के लिए असाइन नहीं किया जा सकता है। आप क्या कर सकते हैं कक्षा का नाम स्ट्रिंग के रूप में प्राप्त करना और उदाहरण बनाने के लिए प्रतिबिंब ढांचे का उपयोग करना है।

+0

निश्चित रूप से आप कर सकते हैं। यदि नहीं, तो आप इसे किसी फ़ंक्शन के पैरामीटर के रूप में पास नहीं कर पाएंगे। शाब्दिक प्रकार का वर्ग है जिसे उस प्रकार के संदर्भों के लिए असाइन किया जा सकता है। – jbruni

+0

शाब्दिक ही कक्षा का नाम नहीं है। प्रति https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.8.2 वर्ग शाब्दिक टोकन 'वर्ग' है। जेएलएस से: "एक वर्ग शाब्दिक एक अभिव्यक्ति है जिसमें एक वर्ग, इंटरफेस, सरणी, या आदिम प्रकार, या छद्म प्रकार के शून्य का नाम होता है, जिसके बाद '।' और टोकन वर्ग। " ध्यान दें कि यह कक्षा का नाम नहीं है, लेकिन नाम'class' के बाद है। –

10

the JLS

15.8.2 कक्षा Literals

के अनुसार

एक वर्ग शाब्दिक एक . और टोकन के बाद एक वर्ग, इंटरफ़ेस, सरणी के नाम से मिलकर एक अभिव्यक्ति, या आदिम प्रकार है class। कक्षा शाब्दिक प्रकार का प्रकार Class है।यह वर्तमान उदाहरण के वर्ग के परिभाषित वर्ग लोडर द्वारा परिभाषित नाम के प्रकार (या void के लिए) क्लास ऑब्जेक्ट का मूल्यांकन करता है।

1

यह समझने के लिए, आपको समझना होगा कि Stringsuperclass (parent class)Object है। (जैसे Hashtable.class) जो करने के लिए class Hashtable के instance (object)

संदर्भित करता है -

class | instance (object) | literal 
------------------------------------------------ 
String | instance_name = | "I am a string." 

class Object जबकि की instance (object) के मूल्य एक Class literal है:

class String के instance (object) के मूल्य एक String literal ("I am a string." जैसे) है

class  | instance (object) | literal 
------------------------------------------------ 
Hashtable | instance_name  | Hashtable. 
+0

'स्ट्रिंग' किसी भी चीज का उदाहरण नहीं है, और निश्चित रूप से किसी भी सुपरक्लास के नहीं। –

0

जब JVM आपके अनुप्रयोग वर्गों को लोड करता है, तो यह उन्हेंसे संग्रहीत करता हैवस्तुओं। इसलिए, आमतौर पर Class प्रकार के कई उदाहरण हैं जो आपकी कक्षाओं का प्रतिनिधित्व करते हैं। तो आप इस तरह कुछ कर सकते हैं:

Class<Bicycle> bicycleClass = Bicycle.class; // returns the object storing your Bicycle class 
bicycleClass.getName(); // returns your class name 
bicycleClass.getDeclaredMethods(); // returns your (declared) class methods 
संबंधित मुद्दे