जावा में .class का क्या अर्थ है?


149

.classजावा में क्या मतलब है? उदाहरण के लिए, यदि मैंने नामक एक वर्ग बनाया Print। क्या Print.classलौटाता है?



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

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

1
इसके अलावा, मुझे लगता है कि विशेष खोज स्ट्रिंग की अजीबता के कारण, इस प्रश्न के बारे में बहुत कम लिखा या खोजा जा सकता है। ऊपर से जुड़े एपीआई डॉक्स के अलावा, मैंने इस नोटेशन को कभी भी कहीं और उल्लेख नहीं किया है (हालांकि आप अक्सर इसे प्रतिबिंब में उपयोग करते हुए देखते हैं)।
jordanpg

2
@MadProgrammer ओपी .classसिंटैक्स के बारे में पूछ रहा है जो केवल .classफ़ाइल नाम एक्सटेंशन से संबंधित है ।
jordanpg

जवाबों:


143

जब आप .classएक वर्ग के नाम के बाद लिखते हैं , तो यह वर्ग शाब्दिक - java.lang.Classवस्तु का संदर्भ देता है जो दी गई कक्षा के बारे में जानकारी का प्रतिनिधित्व करता है ।

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

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

2
क्लास ऑब्जेक्ट के साथ कुछ चीजें क्या कर सकती हैं?
केविन

7
@ केविन java.lang.Class के लिए एपीआई प्रलेखन देखें ।
पेट्रीसिया शहनहान

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

2
तो किस प्रकार का है Print.class?
ज़ीपेंग यांग

1
और एंड्रॉइड कैसे संभालता है new Intent(this, Activity.class? क्या class Activityप्रत्येक वर्ग की तुलना करके यह पता लगाने की कोशिश की जाएगी ?
ज़ीपेंग यांग

56

.class का उपयोग तब किया जाता है जब कक्षा का कोई उदाहरण उपलब्ध नहीं होता है।

.getClass() का उपयोग तब किया जाता है जब कक्षा का एक उदाहरण उपलब्ध हो।

object.getClass() दी गई वस्तु का वर्ग लौटाता है।

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

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

यह आउटपुट होगा:

class java.lang.String

यह स्ट्रिंग ऑब्जेक्ट का वर्ग है :)


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

शानदार विवरण। इस बिंदु पर अधिकार। आप किस तरह के बीच भेद की पहचान करते हैं .classऔर.getClass().
सेवस्तन सवण्युक

6

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

.classसिंटेक्स

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

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

Class c = boolean.class;  // correct

देखें: वर्ग के बारे में docs.oracle.com


6

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

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

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

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


3

यदि कोई उदाहरण उपलब्ध नहीं है, तो .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());
       }
    }

1

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


4
in a fully object-oriented language, a Class is also an Object? <प्रशस्ति पत्र की आवश्यकता>
सैम ड्यूफेल

0

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.