कोई बता सकता है कि कक्षा लोडिंग और कक्षा को तत्काल करने के बीच क्या अंतर है। जब हम स्टेटिक वैरिएबल के साथ एक वर्ग लोड करते हैं तो क्या कक्षा को लोड होने के साथ ही यह तुरंत चालू हो जाता है? सभी स्थैतिक कोड कक्षा के हिस्से के बजाय व्यक्तिगत उदाहरणों के बाद। यह उपयोगी होगा अगर किसी ने मुझे बेहतर समझने में मदद करने के लिए एक उदाहरण दिया।कक्षा को लोड करने और इसे तुरंत चालू करने के बीच अंतर
उत्तर
यहाँ कुछ अच्छा विवरण (एक उदाहरण और अवलोकन के साथ) है
When a class is loaded and initialized in JVM - Java
जब कक्षा जावा में भरी हुई है
कक्षा लोड हो रहा है जावा में ClassLoaders को लागू किया जा सकता है जिसके द्वारा किया जाता है कक्षा शुरू होने की आवश्यकता होने तक कक्षा में उत्सुकता से एक वर्ग को संदर्भित करें या कक्षा में आलसी लोड करें। यदि क्लास को वास्तव में इस्तेमाल होने से पहले लोड किया जाता है तो यह प्रारंभ होने से पहले अंदर बैठ सकता है। मेरा मानना है कि यह जेवीएम से जेवीएम में भिन्न हो सकता है। हालांकि जेएलएस द्वारा इसकी गारंटी है कि स्थिर प्रारंभिक आवश्यकता होने पर कक्षा को लोड किया जाएगा।
जब एक कक्षा जावा
में आरंभ नहीं हो जाता जब एक कक्षा जावा में आरंभ नहीं हो जाता वर्ग लोड हो रहा है के बाद, वर्ग के प्रारंभ जगह वर्ग के सभी स्थिर सदस्यों आरंभ जिसका अर्थ है लेता है। A वर्ग जावा में प्रारंभ हो जाती है:
1) वर्ग का एक उदाहरण class.forName() है, जो जावा में ClassNotFoundException फेंक कर सकते हैं का उपयोग कर प्रतिबिंब का उपयोग कर या तो नए() कीवर्ड या उपयोग कर बनाई गई है।
2) कक्षा की एक स्थिर विधि लागू की जाती है।
3) कक्षा का एक स्थिर क्षेत्र असाइन किया गया है।
4) कक्षा का एक स्थिर क्षेत्र उपयोग किया जाता है जो स्थिर चर नहीं है।
5) यदि कक्षा शीर्ष स्तर की कक्षा है और वर्ग के भीतर अक्षय रूप से घोंसला वाला कथन निष्पादित किया गया है।
आशा है कि मदद करता है।
मैं थोड़ा उलझन में हूं और आपके साथ कुछ स्पष्टीकरण देना चाहता हूं। आलसी लोडिंग से हमारा मतलब है कि जब भी क्लासलोडर वर्तमान कक्षा के अंदर एक कक्षा घोषणा देखता है, तब भी यह दूसरी कक्षा को लोड नहीं करता है क्योंकि इसे अभी तक शुरू नहीं किया गया है और उत्सुक लोडिंग क्लासलोडर प्रत्येक कक्षा को लोड करता है, चाहे वह कोई फर्क नहीं पड़ता कि यह प्रारंभिक है या नहीं और यह भी समझा सकता है कि आलसी और उत्सुक क्लासलोडर दोनों रिकर्सिव कॉल कैसे करते हैं (वे अन्य वर्गों को लोड करते हैं)। – light
कक्षा लोड हो रहा है
जब भी JVM यह एक वर्ग (अपने स्थैतिक चर का उपयोग करने के लिए, एक नई वस्तु बनाने के लिए, अपने स्थिर विधियों का उपयोग करने आदि) यह वर्ग और स्थिर initialisation ब्लॉक चलेंगे लोड होगा की जरूरत है निर्धारित करता है, स्थैतिक चर प्रारंभिक आदि हैंयह (एक उदाहरण के रूप में) एक परिणाम के निम्नलिखित रन के रूप में केवल एक बार
SomeClass.someStaticMethod(); //SomeClass is loaded (if its not already)
SomeClass.someStaticVariable; //SomeClass is loaded (if its not already)
SomeClass var=new SomeClass(); //SomeClass is BOTH loaded (if its not already) AND instantiated
किया है (कम से कम सामान्य परिस्थितियों में):
static Vector3d var=new Vector3d(); //static variables are initialised
static{
//static initialisation block are run
}
एक वर्ग
instantiating दूसरी ओर जब आप new
कीवर्ड के साथ कक्षा का उदाहरण बनाते हैं तो instantiate a class दबाएं; कक्षा को तत्काल बनाना कक्षा का एक वस्तु बना रहा है।
SomeClass var=new SomeClass(); //SomeClass is instantiating (and loaded if its not already)
नतीजतन निर्माता रन:
public SomeClass(){
}
और
{
//initialisation block(s) also run (but these are very uncommonly used)
}
Integer.toString(123);
ऊपर स्थिर विधि कॉल काम करने के लिए, पूर्णांक वर्ग लोड किया जाना चाहिए।
Integer i = new Integer(123);
पूर्णांक वर्ग के
और उपरोक्त कोड में, मैं एक उदाहरण (वस्तु) बना लिया है (जो भी इस काम करने के लिए लोड किया जाना चाहिए, स्पष्ट रूप से)।
कुछ वर्गों को तत्काल नहीं माना जाता है (उदाहरण के लिए, गणित वर्ग, उदाहरण के लिए, जिसमें केवल स्थिर विधियां हैं)।
+1 यह सबसे छोटा लेकिन सबसे अच्छा जवाब है, उदाहरण का सही उपयोग, यह वह जगह है जहां अनुभव तस्वीर में आता है! लिंक पोस्ट किए बिना व्यापक स्पष्टीकरण के लिए – NINCOMPOOP
संदर्भित होने पर एक वर्ग लोड होता है (उदा। Class.forName()
द्वारा)।
आप एक उदाहरण बनाकर किसी ऑब्जेक्ट को instanciate, उदा।
Object o = new Object();
आप प्रतिबिंब का उपयोग कर किसी ऑब्जेक्ट को भी इंस्टेंट कर सकते हैं।
static
कक्षा के सदस्यों को कक्षा लोड होने पर तत्काल किया जाता है, उदा।
public class Sample {
private static int variable = 10;
}
जब मैं अब वर्ग (Class.forName("Sample");
द्वारा उदा) लोड तब चर variable
मूल्य 10
साथ आरंभ नहीं हो जाता।
यदि आप कक्षा का एक नया उदाहरण बना रहे हैं और कक्षा से पहले लोड होने से पहले इसे लोड नहीं किया जाएगा (atomatically)। तो निर्माण Class.forName()
केवल विशेष परिस्थितियों में आवश्यक है (यदि वर्ग संकलित समय के अनुसार ज्ञात नहीं है)।
+1। – NINCOMPOOP
@TheNewIdiot लिंक को बुरी चीज पोस्ट कर रहा है? निश्चित रूप से एक उत्तर "बिना लाइव" लिंक करने में सक्षम होना चाहिए, लेकिन एक संदर्भ –
@RichardTingle क्षमा करने के लिए विश्वसनीयता को जोड़ता है, लेकिन मैं कहना चाहता हूं ** स्पष्टीकरण के बिना ** केवल लिंक उत्तर ** कहना चाहता हूं। – NINCOMPOOP
क्लास लोडर वास्तव में जेवीएम में बाइट कोड लोड करता है, स्थिर प्रारंभिक चलाता है। जब आप कक्षा के भीतर स्थिर फ़ील्ड का उपयोग किए बिना कक्षाओं का उपयोग करना चाहते हैं, तो क्लास लोडर द्वारा पहले लोड किया जाना चाहिए। जावा में डिफॉल्ट क्लासलोडर java.lang.ClassLoader
है। लोडिंग केवल एक बार किया जाता है।
जबकि कक्षा तत्काल कक्षा में स्मृति का उदाहरण बना रहा है। हम new
का उपयोग कर कक्षा को तुरंत चालू कर सकते हैं। क्लास तत्काल कई बार किया जा सकता है। जैसे: Animal a=new Animal();
के पीछे प्राप्त कर सकता हूं आप कह रहे हैं कि क्लास लोडर स्थिर प्रारंभिक चलाता है और लोडिंग ठीक उसी समय किया जाता है, तब क्या होता है जब वर्ग का एक उदाहरण स्थैतिक चर के मान को बदलता है? –
जब कक्षा लोडर कक्षा के कीवर्ड से मुकाबला करता है तो यह जांच करेगा कि कक्षा पहले ही लोड हो चुकी है या नहीं। क्लास लोड होने पर स्थैतिक चर प्रारंभ हो जाता है, जब आप वर्ग के नए उदाहरण बनाते हैं तो कक्षा द्वारा किए गए परिवर्तन प्रतिबिंबित होंगे। – Rohan
शायद मैं स्पष्ट नहीं हूं। मैं पूछ रहा हूं कि मैंने कक्षा के एक उदाहरण (ऑब्जेक्ट) बनाया है। इस उदाहरण का उपयोग करके मैं स्थैतिक चर के मान को बदलता हूं। यह परिवर्तन लोड वर्ग में कैसे दिखाई देता है? –
- 1. कक्षा शुरू करने और किसी ऑब्जेक्ट को तुरंत चालू करने के बीच अंतर?
- 2. कक्षा को विस्तारित करने और PHP में इसे शामिल करने के बीच क्या अंतर है?
- 3. एंड्रॉइड को एप्लिकेशन को तुरंत चालू करने में असमर्थ java.lang.ClassNotFoundException:
- 4. क्या __init__ को कॉल किए बिना कक्षा को तुरंत चालू करने का कोई तरीका है?
- 5. एक HttpPostedFile को तुरंत चालू करने के लिए
- 6. जावा में भीतरी कक्षा के साथ रिकर्सिव बाध्य जेनेरिक को तुरंत चालू करने के लिए कैसे?
- 7. विजुअल स्टूडियो के बीच एक निष्पादन योग्य लॉन्च करने और इसे लॉन्च करने के बीच अंतर?
- 8. कक्षा आयात और विस्तार करने के बीच क्या अंतर है?
- 9. सी # को उत्तराधिकारी होने तक कक्षा को तुरंत चालू करने का सबसे आसान तरीका नहीं है?
- 10. मैन्युअल रूप से टेम्पलेट को तुरंत चालू करने में त्रुटि
- 11. पॉइंटर को मुक्त करने और इसे पूर्ण करने के बीच क्या अंतर है?
- 12. क्या इसे सम्मिलित किए बिना एनएसएमएनेज्ड ऑब्जेक्ट को तुरंत चालू करने का कोई तरीका है?
- 13. एक चर और गुण को संशोधित करने के बीच अंतर
- 14. पायथन में कक्षा निकाय में इसे परिभाषित करने के लिए __init__ में किसी सदस्य को परिभाषित करने के बीच अंतर?
- 15. .NET - कक्षा कैसे बनाएं ताकि केवल एक अन्य विशिष्ट वर्ग इसे तुरंत चालू कर सके?
- 16. स्क्रीन अपडेटिंग बंद करें और इसे चालू करने के लिए चालू होने पर इसे वापस चालू करें?
- 17. खोजने और फ़िल्टर करने के बीच अंतर
- 18. कक्षा को तुरंत चालू करने के लिए मुझे "नए" ऑपरेटर का उपयोग क्यों नहीं करना चाहिए और क्यों?
- 19. कक्षा क्षेत्र और ढेर के बीच अंतर
- 20. संपत्ति को परिभाषित और असाइन करने के बीच अंतर
- 21. कक्षा और मॉड्यूल के बीच अंतर
- 22. फ़ाइल-जैसी और रीडलाइन को कॉल करने के बीच अंतर
- 23. $ ("# आईडी") के बीच अंतर। लोड और $ .ajax?
- 24. उद्देश्य-सी में स्ट्रिंग से कक्षा के किसी ऑब्जेक्ट को तुरंत चालू करने के लिए कैसे करें?
- 25. पृष्ठों को पुनः लोड करने के तरीकों के बीच मतभेद
- 26. Magento उत्पाद लोड - loadByAttribute और लोड विधियों के बीच अंतर
- 27. उद्देश्य-सी रनटाइम रूट मेटाक्लास और अन्य कक्षा विवरणों को तुरंत कैसे चालू करता है?
- 28. धागे को चलाने और शुरू करने के बीच अंतर
- 29. एक टुकड़े को अलग करने और इसे हटाने के बीच क्या अंतर है?
- 30. किसी एप्लिकेशन को अनइंस्टॉल करने/इंस्टॉल करने और अपग्रेड करने के बीच अंतर
एक वैकल्पिक StackExchange साइट हो सकता है [इस उत्तर] (http://programmers.stackexchange.com/questions/53181/what-is-the-difference-between-instantiating- और लोडिंग-एक श्रेणी में जावा)। यह बहुत व्यापक है। – NINCOMPOOP
@TheNewIdiot मुझे नहीं लगता कि सवाल व्यापक है क्योंकि इसमें एक बहुत ही विशिष्ट दायरा है और एक विशिष्ट उत्तर भी है। –
एसओ भी ** विस्तृत ** परिभाषित करता है * इस प्रारूप के लिए अच्छे उत्तर बहुत लंबे होंगे। * !!! – NINCOMPOOP