दिलचस्प पोस्ट
कैसे सी में एक trie बनाने के लिए # AppCompat v7 r21 values.xml में त्रुटि लौट रहा है? अलग-अलग कार्यों के अलग-अलग पते हैं? एक्सेल वर्कबुक खोलने के लिए वाइल्डकार्ड का उपयोग करना सी ++ में यूनिकोड प्रोसेसिंग ऑन-चेंज इवेंट हैंडलर रेडियो बटन (INPUT प्रकार = "रेडियो") के लिए एक मान के रूप में काम नहीं करता है बिना आवश्यकता के बगैर वेबपैक का उपयोग करके उप-डायरेक्टरी में सभी फाइलों को लोड कैसे करें PKIX पथ बिल्डिंग विफल: अनुरोधित लक्ष्य के लिए वैध प्रमाणीकरण पथ खोजने में असमर्थ सी # एक्सएमएल टिप्पणियों से उत्पन्न प्रलेखन जावा में एक वर्ग के विभिन्न उदाहरणों को चलने वाले धागे के बीच एक स्थिर चर को कैसे सिंक्रनाइज़ करें? स्मृति लीक के बिना DOM तत्व कैसे निकालें? बेहतर हेनिंग स्ट्रेट्सी अब हाइबरनेट 5 में काम नहीं कर रहा है पायथन कक्षा का आईडी अद्वितीय क्यों नहीं है, जब इसे जल्दी से बुलाया जाता है? ऑरेकल में एक संग्रहीत कार्यविधि के बिना एक पंक्ति में कितनी पंक्तियां एकत्रित की जा सकती हैं? प्राइमफेस को दबाए जाने पर घटनाओं का निष्पादन आदेश p: कमांड बटन

जब निष्पादित वर्ग के स्थैतिक ब्लॉक होता है?

मेरे पास 2 जार हैं, चलो उन्हें a.jar और b.jar कहते हैं।

b.jar a.jar पर निर्भर करता है

A.jar में, मैंने एक वर्ग को परिभाषित किया, चलो इसे StaticClass कहते हैं। StaticClass में, मैंने एक स्थिर ब्लॉक परिभाषित किया, जिसे "init" नामक एक विधि बुलाया गया है:

public class StaticClass { static { init(); } public void static init () { // do some initialization here } } 

b.jar में, मेरे पास एक मुख्य है, इसलिए मुख्य में, मुझे उम्मीद है कि init () विधि को बुलाया गया है, लेकिन वास्तव में नहीं। मुझे संदेह है कि क्योंकि स्टैटिक क्लास jvm द्वारा लोड नहीं किया गया है, कोई मुझे बता सकता है

  1. क्या मेरा निष्कर्ष सही है?
  2. क्लाउड लोड करने के लिए jvm क्या ट्रिगर करता है?
  3. मैं स्वचालित रूप से निष्पादित स्थैतिक ब्लॉक कैसे प्राप्त करूं?

धन्यवाद

वेब के समाधान से एकत्रित समाधान "जब निष्पादित वर्ग के स्थैतिक ब्लॉक होता है?"

हाँ आप सही है। स्थैतिक आरंभीकरण ब्लॉक तब चलाए जाते हैं जब JVM (क्लास लोडर – विशिष्ट होना) भार StaticClass (जो पहली बार कोड में संदर्भित होता है) होता है।

आप इस पद्धति को स्पष्ट रूप से StaticClass.init() बुलाकर लागू कर सकते हैं जो JVM पर भरोसा करने के लिए बेहतर है।

आप क्लास को लोड करने के लिए JVM को मजबूर करने के लिए Class.forName(String) का उपयोग करने की कोशिश कर सकते हैं और इसके स्थैतिक ब्लॉकों को Class.forName(String) सकते हैं।

हां, आप सही हैं, चूंकि आप अपना StaticClass का उपयोग नहीं कर रहे हैं क्योंकि यह वीएम द्वारा लोड नहीं है और इसलिए init() कभी निष्पादित नहीं किया जाता है।

आपके दूसरे प्रश्न के लिए, आपको शायद मुश्किल तरीके से जाना होगा और सभी उपलब्ध कक्षाओं को स्कैन करना होगा और उन्हें लोड करना होगा।

https://stackoverflow.com/a/3223019/393657

आप सही हैं, उदाहरण के लिए, कक्षा तक पहुंचने का सबसे आसान तरीका है

StaticClass.class.newInstance();

या आपकी मुख्य पद्धति में उस सम्मान के लिए कुछ। यह सुनिश्चित करेगा कि कक्षा को क्लासलोडर द्वारा लोड किया गया है।

स्थैतिक कोड निष्पादित होता है जब आपका क्लास ( StaticClass I अनुमान) संदर्भित होता है।

इस प्रकार, यदि आप StaticClass का एक नया उदाहरण StaticClass या यदि आप इसकी स्थिर विधियों में से एक कॉल करते हैं , तो इसे निष्पादित किया जाना चाहिए।

हां, स्थिर प्रारंभकर्ता को तब निष्पादित किया जाएगा जब कक्षा भरी हुई है। यह सामान्य रूप से तब होता है जब आप पहली बार क्लास लोडिंग प्रसंग में कक्षा तक पहुंचते हैं।

स्टेटिक ब्लॉक निष्पादित होता है जब लोडेड कक्षा को आरम्भिक या पहले संदर्भित किया जाता है। वर्ग लोड हो रहा है इसका मतलब यह नहीं है कि कक्षा को आरम्भिक किया जाना है। जेवीएम कक्षा लोडिंग चिंता के लिए अलग चीजें हैं

b.jar मुख्य पद्धति वर्ग में उस स्टेटीक क्लास को तब विस्तारित करना चाहिए कि स्वचालित रूप से स्थिर ब्लॉक और init () को लागू किया जाएगा

कुछ और जोड़ना:

स्थिर ब्लॉक जब jvm लोड वर्ग कार्यान्वित किया जाएगा।

आपके उदाहरण में आप कक्षा को StaticClass करके अपने StaticClass init() विधि को कॉल कर सकते हैं

जैसे StaticClass staticClass = नया StaticClass ();

या

StaticClass.class.newInstance(); यह अधिक preferebal है