2013-02-26 27 views
97

जावा में .class का अर्थ क्या है? उदाहरण के लिए, यदि मैंने Print नामक एक कक्षा बनाई है। Print.class वापस क्या करता है? java.lang.Class उद्देश्य यह है कि जानकारी के बारे में किसी वर्ग का प्रतिनिधित्व करता है -जावा में क्लास का क्या अर्थ है?

+0

http://docs.oracle.com/javase/tutorial/reflect/class/classNew.html –

+0

मुझे डर है कि मैं पूरी तरह से समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं। यदि आप थोड़ा और विस्तार कर सकते हैं, तो कोई आपको अधिक उपयोगी जानकारी प्रदान करने में सक्षम हो सकता है –

+20

यह निश्चित रूप से मेरे लिए एक वास्तविक प्रश्न जैसा दिखता है। मैं सिर्फ यह सवाल खुद ही पूछ रहा था, और एक त्वरित Google खोज के बाद खुद को यहां पाया। मुझे लगता है कि अगर मुझे पता चलेगा कि मेरा सवाल असली नहीं था तो मुझे परेशान नहीं होना चाहिए था! –

उत्तर

92

जब आप एक वर्ग के नाम के बाद .class लिखते हैं, यह वर्ग शाब्दिक संदर्भ देता है।

उदाहरण के लिए, यदि आपकी कक्षा Print है, तो Print.class एक ऑब्जेक्ट है जो रनटाइम पर Print वर्ग का प्रतिनिधित्व करता है। यह वही ऑब्जेक्ट है जो Print के किसी भी (प्रत्यक्ष) उदाहरण के getClass() विधि द्वारा वापस किया जाता है।

Print myPrint = new Print(); 
System.out.println(Print.class.getName()); 
System.out.println(myPrint.getClass().getName()); 
+1

क्लास ऑब्जेक्ट के साथ कुछ चीजें क्या कर सकती हैं? – Kevin

+6

@ केविन एपीआई दस्तावेज [java.lang.Class] (http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html) के लिए देखें। –

+0

आवेदन: निजी फ़ील्ड तक पहुंच, उदाहरण के लिए: 'Writer.class.getDeclaredField ("writeBuffer") '। – jordanpg

36

। क्लास का उपयोग तब उपलब्ध होता है जब कक्षा उपलब्ध नहीं होती है।
.getClass() का उपयोग तब किया जाता है जब कक्षा उपलब्ध हो।

object.getClass() दिए गए ऑब्जेक्ट की कक्षा देता है। उदाहरण के लिए:

String string = "hello"; 
System.out.println(string.getClass().toString()); 

हो जाएगा ताकि उत्पादन

class java.lang.String 

इस स्ट्रिंग वस्तु :)

+5

'getClass() 'केवल तभी उपयोगी है जब आपके पास कक्षा के किसी ऑब्जेक्ट को इंगित करने वाला संदर्भ हो।' ClassName.class' का उपयोग किया जा सकता है भले ही कक्षा में कोई उदाहरण न हो। उदाहरण के लिए, 'Math.class' पर विचार करें। प्रत्येक कुछ स्थितियों के लिए सही है। –

+0

अच्छी व्याख्या ... धन्यवाद !!!! :) – JAVA

+0

शानदार स्पष्टीकरण। इसके बिंदु पर। जानें कि आपने'class' और '.getClass() के बीच भेद को कैसे पहचाना है। ' – Sevastyan

1

मुझे लगता है कि कुंजी यहाँ एक कक्षा और एक वस्तु के बीच का अंतर समझ है वर्ग है। एक वस्तु कक्षा का एक उदाहरण है। लेकिन पूरी तरह से ऑब्जेक्ट उन्मुख भाषा में, कक्षा भी एक ऑब्जेक्ट है। इसलिए .class को कॉल करना उस कक्षा के क्लास ऑब्जेक्ट का संदर्भ प्राप्त करता है, जिसे तब कुशलतापूर्वक उपयोग किया जा सकता है।

+2

' पूरी तरह ऑब्जेक्ट-उन्मुख भाषा में, कक्षा भी ऑब्जेक्ट' है? <उद्धरण वांछित> –

3

तो एक वस्तु का एक उदाहरण के लिए, उपलब्ध तो है अपनी कक्षा प्राप्त करने के लिए सबसे आसान तरीका Object.getClass()

आह्वान करने के लिए .class सिंटेक्स

हैं प्रकार उपलब्ध है लेकिन कोई उदाहरण है तो यह संभव है प्रकार के नाम पर .class जोड़कर कक्षा प्राप्त करने के लिए। यह एक प्राचीन प्रकार के लिए कक्षा प्राप्त करने का सबसे आसान तरीका भी है।

boolean b; 
Class c = b.getClass(); // compile-time error 

Class c = boolean.class; // correct 

देखें: docs.oracle.com about class

2

अगर कोई उदाहरण उपलब्ध तो .class वाक्य रचना अन्यथा आप getClass() विधि का उपयोग कक्षा वस्तु प्राप्त करने के लिए कर सकते हैं एक वर्ग के लिए इसी वर्ग वस्तु प्राप्त करने के लिए प्रयोग किया जाता है। चूंकि, आदिम डेटा प्रकार का कोई उदाहरण नहीं है, हमें प्राचीन डेटा प्रकारों के लिए .class वाक्यविन्यास का उपयोग करना होगा।

package test; 

    public class Test { 
     public static void main(String[] args) 
     { 
      //there is no instance available for class Test, so use Test.class 
      System.out.println("Test.class.getName() ::: " + Test.class.getName()); 

      // Now create an instance of class Test use getClass() 
      Test testObj = new Test(); 
      System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName()); 

      //For primitive type 
      System.out.println("boolean.class.getName() ::: " + boolean.class.getName()); 
      System.out.println("int.class.getName() ::: " + int.class.getName()); 
      System.out.println("char.class.getName() ::: " + char.class.getName()); 
      System.out.println("long.class.getName() ::: " + long.class.getName()); 
     } 
    } 
3

बस स्पष्ट करने के लिए, इस '.class' विधि बाईटकोड फ़ाइल आप जावा कोड और न ही OOP सिद्धांत में कक्षा बनाम वस्तु की अवधारणाओं के बीच एक भ्रम संकलन के बाद देखने की बात नहीं कर रहा है।

यह '.class' विधि कोड प्रतिबिंब के लिए जावा में उपयोग की जाती है। आम तौर पर आप अपनी कक्षा के लिए मेटा डेटा एकत्र कर सकते हैं जैसे पूर्ण योग्य वर्ग का नाम, स्थिरांक की सूची, सार्वजनिक क्षेत्रों की सूची इत्यादि।

चेक इन कड़ियों (पहले से ही ऊपर उल्लेख किया है) सभी विवरण प्राप्त करने के लिए:
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html

आम तौर पर आप प्रतिबिंब अभी प्रयोग पर योजना नहीं है जब आप अपनी परियोजना का निर्माण शुरू। यह ऐसा कुछ है जिसे आप जानते हैं कि आपको पहले से ही काम करने वाले कोड को प्रबंधित करने की कोशिश करने के बाद आवश्यकता है। कई बार आपको अपने कार्यक्रम के कई उदाहरणों को प्रबंधित करने की आवश्यकता होती है। हो सकता है कि आप यह निर्धारित करने के लिए प्रत्येक विशेष 'क्लोन' की पहचान करना चाहते हैं कि कुछ पहले से ही परिभाषित किया गया है या कार्यों की संख्या गिनती है, या बस अपनी कक्षा के किसी विशेष उदाहरण के विवरण को लॉग इन करें।

0

एक कक्षा शाब्दिक एक अभिव्यक्ति है जिसमें एक वर्ग, इंटरफेस, सरणी, या आदिम प्रकार, या छद्म प्रकार के शून्य का नाम होता है, जिसके बाद '।' और टोकन वर्ग। JDK 5.0 में परिवर्तनों में से एक, java.lang.Class Class<T>, उस वर्ग java.lang.Class सामान्य है इसलिए:

Class<Print> p = Print.class; 

यहाँ संदर्भ:

https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html

http://docs.oracle.com/javase/tutorial/extra/generics/literals.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.2

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