क्लास फ़ाइल क्या है?
जावा में क्लास फ़ाइल .java क्लास का संकलित आउटपुट है जिसे वास्तव में जावा वर्चुअल मशीन (JVM) द्वारा निष्पादित किया जाता है। क्लास फाइलों को व्यक्तिगत रूप से निष्पादित किया जा सकता है और साथ ही अन्य पैकेज फाइलों के साथ एक JAR फ़ाइल का एक बंडल के रूप में एक हिस्सा हो सकता है। इन्हें कमांड लाइन इंटरफेस से javac
कमांड का उपयोग करके बनाया जा सकता है। कुछ Java IDE जैसे Eclipse और NetBeans प्रोजेक्ट के Java से .class आउटपुट फाइल प्रदान करते हैं। फ़ाइलें।
वर्ग फ़ाइल स्वरूप
एक जावा क्लास फाइल में बायटेकोड होता है जो जेवीएम द्वारा चलाया जाने वाला इंटरमीडिएट कोड होता है। एक वर्ग फ़ाइल में 8-बिट बाइट्स की धारा होती है और मल्टीबाइट डेटा आइटम हमेशा बड़े-एंडियन ऑर्डर में संग्रहीत होते हैं।
क्लासफ़ाइल संरचना
क्लास फाइल स्ट्रक्चर नीचे दिखाया गया है।
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
कहाँ पे:
- u1 = अहस्ताक्षरित एक-बाइट मात्रा
- u2 = अहस्ताक्षरित दो-बाइट मात्रा
- u4 = अहस्ताक्षरित चार-बाइट मात्रा
Oracle वर्ग फ़ाइल स्वरूप में समझाया गया .class फ़ाइल संरचना का विवरण और इसके द्वारा संदर्भित किया जा सकता है संदर्भ के लिए डेवलपर्स। इन क्षेत्रों का सारांश इस प्रकार है।
मैजिक
- मैजिक आइटम क्लास फाइल फॉर्मेट की पहचान करने वाले मैजिक नंबर की आपूर्ति करता है; इसका मान 0xCAFEBABE है।माइनर_वर्जन
,मेजर_वर्जन
- माइनर_वर्जन और मेजर_वर्जन आइटम के मान इस क्लास फ़ाइल के माइनर और मेजर वर्जन नंबर हैं।constant_pool_count
- कांस्टेंट_पूल_काउंट आइटम का मान, कॉन्स्टेंट_पूल तालिका में प्रविष्टियों की संख्या के साथ एक जोड़ के बराबर है। एक स्थिर_पूल इंडेक्स को वैध माना जाता है यदि यह शून्य से अधिक है और स्थिर_पूल_काउंट से कम है, अपवाद के साथ लंबे और दोहरे प्रकार के स्थिरांक हैं।constant_pool[]
- कॉन्स्टेंट_पूल विभिन्न स्ट्रिंग स्थिरांकों, वर्ग और इंटरफ़ेस नामों, फ़ील्ड नामों और अन्य स्थिरांकों का प्रतिनिधित्व करने वाली संरचनाओं की एक तालिका है (§4.4) जो ClassFile संरचना और इसके उप-संरचनाओं के भीतर संदर्भित हैं। प्रत्येक कॉन्स्टेंट_पूल तालिका प्रविष्टि का प्रारूप उसके पहले “टैग” बाइट द्वारा दर्शाया गया है।Access_flags
- access_flags आइटम का मान फ़्लैग का एक मास्क है जिसका उपयोग इस वर्ग या इंटरफ़ेस की एक्सेस अनुमतियों और गुणों को दर्शाने के लिए किया जाता है।this_class
- इस_क्लास आइटम का मान कॉन्स्टेंट_पूल टेबल में एक मान्य इंडेक्स होना चाहिए।super_class
- एक वर्ग के लिए, सुपर_क्लास आइटम का मान या तो शून्य होना चाहिए या कॉन्स्टेंट_पूल टेबल में एक मान्य इंडेक्स होना चाहिए।interfaces_count
- इंटरफ़ेस_काउंट आइटम का मान इस वर्ग या इंटरफ़ेस प्रकार के प्रत्यक्ष सुपर इंटरफ़ेस की संख्या देता है।इंटरफेस []
- इंटरफेस सरणी में प्रत्येक मान निरंतर_पूल तालिका में एक मान्य अनुक्रमणिका होना चाहिए।फ़ील्ड_काउंट
- फ़ील्ड_काउंट आइटम का मान फ़ील्ड तालिका में फ़ील्ड_इन्फो संरचनाओं की संख्या देता है।फ़ील्ड []
- फ़ील्ड तालिका में प्रत्येक मान एक फ़ील्ड_इन्फो संरचना होनी चाहिए जो इस वर्ग या इंटरफ़ेस में किसी फ़ील्ड का पूरा विवरण दे।methods_count
- मेथड्स_काउंट आइटम का मान मेथड्स टेबल में मेथड_इन्फो स्ट्रक्चर्स की संख्या देता है।तरीके []
- मेथड्स टेबल में प्रत्येक मान एक मेथड_इंफो स्ट्रक्चर होना चाहिए जो इस क्लास या इंटरफ़ेस में एक मेथड का पूरा विवरण दे। यदि किसी भी ACC_NATIVE और ACC_ABSTRACT फ़्लैग को किसी method_info संरचना के access_flags आइटम में सेट नहीं किया गया है, तो विधि को लागू करने वाले जावा वर्चुअल मशीन निर्देश भी प्रदान किए जाते हैं।attributes_count
- विशेषता_गिनती आइटम का मान इस वर्ग की विशेषता तालिका में विशेषताओं की संख्या (§4.7) देता है।विशेषताएं []
- विशेषता तालिका का प्रत्येक मान एक विशेषता_इन्फो संरचना होना चाहिए।