दिलचस्प पोस्ट
कई तत्वों के लिए jQuery के समान क्लिक ईवेंट स्ट्रिंग से नंबर निकालें एईएस एन्क्रिप्शन मोड का चयन कैसे करें (सीबीसी ईसीबी सीटीआर ओसीबी सीएफबी)? कैसे विंडोज कमांड लाइन से PHP को चलाने के लिए एंड्रॉइड एप्लिकेशन में एक्टिविटी के बीच डेटा कैसे प्राप्त करूं? JQuery के साथ तत्व पर मँडरा अगर पता लगाएँ angular.service बनाम angular.factory ऑन-चेंज इवेंट हैंडलर रेडियो बटन (INPUT प्रकार = "रेडियो") के लिए एक मान के रूप में काम नहीं करता है Window.location.href और Window.open () जावास्क्रिप्ट में विधियों क्या गिट-मर्ज के लिए लाइन-एंडिंग अंतर को अनदेखा करना संभव है? ASP.NET बंडल कैसे minification अक्षम करने के लिए ASP.NET MVC रेजर: नियंत्रक की कार्रवाई के अंदर रेज़र आंशिक दृश्य के HTML को रेंडर कैसे करें I पायथन के साथ वेब स्क्रैपिंग जावास्क्रिप्ट में मैं कैसे एक सरणी को खाली कर सकता हूं? मैं लिनक्स में C ++ कोड को कैसे चल सकता हूं?

जावा: स्टेटिक बनाम इनर क्लास

स्थिर और गैर स्थिर आंतरिक वर्ग के बीच अंतर क्या है?

वेब के समाधान से एकत्रित समाधान "जावा: स्टेटिक बनाम इनर क्लास"

एक आंतरिक वर्ग, परिभाषा के द्वारा , स्थिर नहीं हो सकता है, इसलिए मैं अपने प्रश्न को "स्थिर और गैर-स्थिर नेस्टेड वर्गों के बीच अंतर क्या है?"

एक गैर-स्थिर नेस्टेड क्लास को कक्षा के सदस्यों तक पूर्ण पहुंच होती है, जिसके भीतर इसे नेस्ट किया जाता है। एक स्थैतिक नेस्टेड क्लास में घोंसले के शिकार के उदाहरण का कोई संदर्भ नहीं है, इसलिए एक स्थैतिक नेस्टेड क्लास गैर-स्थिर तरीकों को लागू नहीं कर सकता है या उस श्रेणी के एक उदाहरण के गैर-स्थिर क्षेत्रों का उपयोग कर सकता है जिसके भीतर इसे नेस्ट किया गया है।

आइए ऐसे प्रश्नों के लिए ज्ञान के स्रोत को देखें: यहोशू ब्लॉच के प्रभावी जावा :

तकनीकी तौर पर, एक स्थिर आंतरिक कक्षा जैसी कोई चीज नहीं है। प्रभावी जावा के अनुसार, सही शब्दावली एक स्थिर नेस्टेड क्लास है । एक गैर-स्थिर नेस्टेड क्लास वास्तव में एक आंतरिक वर्ग है, साथ ही गुमनाम कक्षाओं और स्थानीय कक्षाओं के साथ।

और अब उद्धरण:

एक नॉनस्टेटिक [नेस्टेड] क्लास का प्रत्येक उदाहरण सम्मिलित रूप से इसके युक्त वर्ग के एक संलग्न उदाहरण से जुड़ा हुआ है … सम्मिलित होने वाले उदाहरणों पर तरीकों का आह्वान करना संभव है।

एक स्थैतिक नेस्टेड क्लास को संलग्न आवृत्ति तक पहुंच नहीं है। यह भी कम जगह का उपयोग करता है

स्थिर आंतरिक और गैर स्थिर आंतरिक कक्षाओं के बीच दो अंतर हैं

  1. सदस्य क्षेत्रों और विधियों को घोषित करने के मामले में, गैर स्थिर आंतरिक कक्षा में स्थिर फ़ील्ड और विधियां नहीं हो सकती हैं। लेकिन, स्थिर आंतरिक वर्ग के मामले में, स्थैतिक और गैर-स्थिर फ़ील्ड और विधि हो सकते हैं।

  2. गैर स्थैतिक भीतर का वर्ग का उदाहरण बाहरी कक्षा के उद्देश्य के संदर्भ में बनाया गया है, जिसमें यह परिभाषित किया गया है, इसका मतलब है कि इसका उदाहरण आवृत है लेकिन स्थैतिक इनर क्लास का उदाहरण बाहरी कक्षा के संदर्भ के बिना बनाया गया है, जिसका अर्थ है कि इसमें उदाहरण शामिल नहीं है।

यह उदाहरण देखें

 class A { class B { // static int x; not allowed here } static class C { static int x; // allowed here } } class Test { public static void main(String… str) { A a = new A(); // Non-Static Inner Class // Requires enclosing instance AB obj1 = a.new B(); // Static Inner Class // No need for reference of object to the outer class AC obj2 = new AC(); } } 
  1. स्टेटिक इनर क्लास क्लास को संलग्न करने के गैर-स्टैटिक सदस्यों तक नहीं पहुंच सकता है। यह सीधे ऑब्जेक्ट के बिना मूल्य प्राप्त करने की प्रक्रियात्मक शैली जैसी क्लास को संलग्न करने के स्थिर सदस्यों (उदाहरण के क्षेत्र और विधियां) का उपयोग कर सकता है

  2. स्थैतिक इनर क्लास दोनों स्थिर और गैर-स्थिर सदस्य घोषित कर सकते हैं। स्थिर तरीके से मुख्य वर्ग के स्थिर सदस्यों तक पहुंच हो सकती है। हालांकि, यह गैर-स्थिर आंतरिक वर्ग सदस्यों तक नहीं पहुंच सकता है। गैर-स्थिर आंतरिक वर्ग के सदस्यों तक पहुंचने के लिए, इसे गैर-स्थिर आंतरिक कक्षा का उद्देश्य बनाना होगा।

  3. गैर-स्थैतिक आंतरिक वर्ग स्थिर क्षेत्र और स्थिर तरीकों को घोषित नहीं कर सकता है। इसे या तो स्थिर या उच्च स्तर के प्रकारों में घोषित किया जाना है। ऐसा करने पर आपको यह त्रुटि मिल जाएगी कि "स्थिर फ़ील्ड केवल स्थैतिक या शीर्ष स्तर प्रकारों में घोषित हो"

  4. गैर-स्थैतिक इनर क्लास मूल्य प्राप्त करने की प्रक्रियात्मक शैली में वर्ग को बंद करने के स्थिर और गैर-स्थिर दोनों सदस्यों तक पहुंच सकता है, लेकिन यह स्थिर आंतरिक वर्ग के सदस्यों तक नहीं पहुंच सकता है।

  5. संलग्न वर्ग आंतरिक कक्षाओं के सदस्यों तक नहीं पहुंच सकता जब तक कि यह आंतरिक कक्षाओं का एक वस्तु तैयार न करे। यदि गैर-स्थिर वर्ग के सदस्यों तक पहुंचने में मुख्य वर्ग यह गैर-स्थिर आंतरिक वर्ग का उद्देश्य बना सकता है।

  6. यदि स्थिर वर्ग के सदस्यों तक पहुंचने में मुख्य वर्ग के पास दो मामले हैं:

    • मामला 1: स्थैतिक सदस्यों के लिए, यह स्थैतिक आंतरिक वर्ग के वर्ग नाम का उपयोग कर सकता है
    • मामला 2: गैर-स्थैतिक सदस्यों के लिए, यह स्थिर आंतरिक वर्ग का उदाहरण बना सकता है।

नेस्टेड कक्षाओं पर चर्चा …

अंतर यह है कि नेस्टेड क्लास घोषणापत्र जो स्थिर है वह भी संलग्न वर्ग के बाहर शुरू किया जा सकता है।

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

लेकिन अगर यह स्थिर है, तो लिंक मौजूद नहीं है, बाहरी क्षेत्रों तक नहीं पहुंचा जा सकता (किसी अन्य ऑब्जेक्ट की तरह एक सामान्य संदर्भ के माध्यम से) और आप इसके द्वारा नेस्टेड कक्षा को अपने आप ही इन्स्तांत कर सकते हैं

एक आंतरिक वर्ग स्थिर नहीं हो सकता है, इसलिए मैं आपके प्रश्न को "स्थिर और गैर-स्थिर नेस्टेड वर्गों के बीच अंतर क्या है" के रूप में दोबारा लिख ​​रहा हूं?

जैसा कि आपने कहा था कि आंतरिक वर्ग स्थैतिक नहीं हो सकता … मुझे नीचे दिए गए कोड को मिला जो स्थैतिक दिया जा रहा है …. कारण है? या जो सही है ….

हां, एक स्थिर नेस्टेड प्रकार के शब्दों में कुछ भी नहीं है जो आपको ऐसा करने से रोक देगा। यह स्निपेट ठीक चल रहा है

  public class MultipleInner { static class Inner { } public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Inner(); } } } 

यह इस वेबसाइट पर पोस्ट की गई एक कोड है …

प्रश्न के लिए —> एक स्थैतिक नेस्टेड क्लास को कई बार इंस्टीटियेट किया जा सकता है?

जवाब था —>

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

लेकिन सामान्य तौर पर, हाँ, एक स्थैतिक नेस्टेड प्रकार को कई बार इन्स्तांत किया जा सकता है

ध्यान दें कि तकनीकी रूप से, एक स्थिर नेस्टेड प्रकार "आंतरिक" प्रकार नहीं है

स्थिर आंतरिक वर्ग: स्थिर और गैर स्थिर सदस्य घोषित कर सकते हैं लेकिन केवल अपने माता-पिता वर्ग के स्थैतिक सदस्यों तक ही पहुंच सकते हैं।

गैर स्थैतिक आंतरिक वर्ग: केवल गैर-स्थिर सदस्य घोषित कर सकते हैं, लेकिन अपने मूल वर्ग के स्थैतिक और गैर स्थिर सदस्य का उपयोग कर सकते हैं।

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