Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में वेरिएबल्स का स्कोप और लाइफटाइम


इंस्टेंस वेरिएबल्स (Instance Variables)

एक वेरिएबल जो क्लास के अंदर और सभी मेथड्स और ब्लॉक्स के बाहर घोषित किया जाता है, इंस्टेंस वेरिएबल होता है। इंस्टेंस वेरिएबल का सामान्य स्कोप क्लास के पूरे भाग में होता है सिवाय स्टेटिक मेथड्स के। इंस्टेंस वेरिएबल का लाइफटाइम तब तक होता है जब तक ऑब्जेक्ट मेमोरी में रहता है।

  • घोषणा स्थान: क्लास बॉडी में, मेथड्स/ब्लॉक्स के बाहर
  • स्कोप: पूरी क्लास (सभी इंस्टेंस मेथड्स, कंस्ट्रक्टर्स, इंस्टेंस इनिशियलाइजर ब्लॉक्स)
  • लाइफटाइम: ऑब्जेक्ट निर्माण से ऑब्जेक्ट डिस्ट्रक्शन (GC) तक
  • डिफ़ॉल्ट मान: टाइप के अनुसार (0, null, false, आदि)
  • एक्सेस: obj.variableName या सीधे इंस्टेंस कॉन्टेक्स्ट में

क्लास वेरिएबल्स / स्टेटिक वेरिएबल्स (Class/Static Variables)

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

  • घोषणा स्थान: क्लास बॉडी में, static कीवर्ड के साथ
  • स्कोप: पूरी क्लास (स्टेटिक और इंस्टेंस दोनों कॉन्टेक्स्ट से एक्सेसिबल)
  • लाइफटाइम: क्लास लोड होने से JVM शटडाउन/अनलोड होने तक
  • डिफ़ॉल्ट मान: टाइप के अनुसार
  • एक्सेस: ClassName.variableName या obj.variableName (डिसकरेज्ड)
  • साझा: क्लास के सभी इंस्टेंसेस द्वारा साझा

लोकल वेरिएबल्स (Local Variables)

वे सभी वेरिएबल्स जो इंस्टेंस और क्लास वेरिएबल्स नहीं हैं, लोकल वेरिएबल्स माने जाते हैं, जिसमें मेथड में पैरामीटर्स भी शामिल हैं। लोकल वेरिएबल का स्कोप उस ब्लॉक के भीतर होता है जिसमें यह घोषित किया गया है और लोकल वेरिएबल का लाइफटाइम तब तक होता है जब तक कंट्रोल उस ब्लॉक को नहीं छोड़ देता जिसमें यह घोषित किया गया है।

  • घोषणा स्थान: मेथड, कंस्ट्रक्टर, ब्लॉक, या पैरामीटर लिस्ट के अंदर
  • स्कोप: घोषणा से लेकर ब्लॉक के अंत तक ({ } के भीतर)
  • लाइफटाइम: ब्लॉक एंट्री से ब्लॉक एग्जिट तक
  • डिफ़ॉल्ट मान: कोई नहीं - उपयोग से पहले स्पष्ट रूप से इनिशियलाइज़ करना आवश्यक
  • एक्सेस: केवल घोषित ब्लॉक के भीतर
  • थ्रेड-सेफ: प्रत्येक थ्रेड का अपना कॉपी (स्टैक पर)

तुलना तालिका

विशेषताइंस्टेंस वेरिएबलक्लास/स्टेटिक वेरिएबललोकल वेरिएबल
कीवर्डकोई नहींstaticकोई नहीं
स्थानक्लास बॉडी, मेथड्स के बाहरक्लास बॉडी, मेथड्स के बाहरमेथड/ब्लॉक/पैरामीटर के अंदर
स्कोपपूरी क्लास (नॉन-स्टेटिक कॉन्टेक्स्ट)पूरी क्लास (सभी कॉन्टेक्स्ट)घोषित ब्लॉक तक सीमित
लाइफटाइमऑब्जेक्ट के जीवन तकक्लास लोडेड रहने तकब्लॉक निष्पादन तक
मेमोरीहीप (ऑब्जेक्ट का हिस्सा)मेटास्पेस/हीप (क्लास डेटा)स्टैक (थ्रेड-लोकल)
डिफ़ॉल्ट मानहांहांनहीं (कंपाइलर एरर)
थ्रेड-सेफ्टीनहीं (सिंक्रोनाइजेशन चाहिए)नहीं (सिंक्रोनाइजेशन चाहिए)हां (प्रति-थ्रेड)

उदाहरण

public class VariableScopeDemo {
    // इंस्टेंस वेरिएबल
    String instanceVar = "Instance";
    
    // क्लास/स्टेटिक वेरिएबल
    static String classVar = "Static";
    
    public void method() {
        // लोकल वेरिएबल
        String localVar = "Local";
        
        // ब्लॉक स्कोप
        if (true) {
            String blockVar = "Block"; // केवल इस ब्लॉक में
            System.out.println(blockVar); // OK
        }
        // System.out.println(blockVar); // ERROR - स्कोप से बाहर
        
        // एक्सेस
        System.out.println(instanceVar); // OK
        System.out.println(classVar);    // OK
        System.out.println(localVar);    // OK
    }
    
    public static void staticMethod() {
        System.out.println(classVar);    // OK
        // System.out.println(instanceVar); // ERROR - स्टेटिक कॉन्टेक्स्ट से इंस्टेंस एक्सेस
    }
}

पैरामीटर्स (Parameters)

  • मेथड पैरामीटर्स लोकल वेरिएबल्स ही होते हैं।
  • स्कोप: पूरे मेथड बॉडी में।
  • लाइफटाइम: मेथड कॉल से मेथड रिटर्न तक।
  • कॉलर द्वारा मान पास किया जाता है (पास-बाय-वैल्यू)।

वेरिएबल शैडोइंग (Variable Shadowing)

public class ShadowDemo {
    String name = "Class Level"; // इंस्टेंस वेरिएबल
    
    void method(String name) { // पैरामीटर (लोकल) - शैडोज इंस्टेंस
        System.out.println(name); // पैरामीटर प्रिंट होगा
        System.out.println(this.name); // इंस्टेंस वेरिएबल एक्सेस
    }
    
    void anotherMethod() {
        String name = "Local"; // लोकल वेरिएबल - शैडोज इंस्टेंस
        System.out.println(name); // लोकल प्रिंट होगा
    }
}

निष्कर्ष: स्कोप (दृश्यता) और लाइफटाइम (अस्तित्व अवधि) को समझना सही वेरिएबल प्रबंधन, मेमोरी दक्षता और बग्स से बचने के लिए आवश्यक है। इंस्टेंस=ऑब्जेक्ट लाइफ, स्टेटिक=क्लास लाइफ, लोकल=ब्लॉक लाइफ।

  1. - जावा में Thread और Runnable के बीच अंतर

    थ्रेड एक्जीक्यूशन का नया थ्रेड बनाने के दो तरीके हैं। एक है Thread क्लास का सबक्लास घोषित करना। इस सबक्लास को Thread क्लास के run मेथड को ओवरराइड करना चाहिए। सबक्लास का इंस्टेंस तब एलोकेट और स्टार्ट किया जा सकता है। थ्रेड बनाने का दूसरा तरीका है Runnable इंटरफेस को इम्प्लीमेंट करने वाली क्लास घोषित

  1. - Java में कांस्टेंट और final वेरिएबल में क्या अंतर है?

    Java में कांस्टेंटएक वास्तविक कांस्टेंट है:अपरिवर्तनीय (final)क्लास-स्तरीय (static) - प्रति JVM केवल एक प्रतिकंपाइल-समय पर आरंभclass Data { static final int INTEGER_CONSTANT = 20; // वास्तविक कांस्टेंट }Final वेरिएबलएक final इंस्टेंस वेरिएबल:प्रति ऑब्जेक्ट एक बार असाइन किया जा सकता हैप्रत्येक इं

  1. - Java में ग्लोबल और लोकल वेरिएबल्स

    लोकल वेरिएबल्स मेथड्स, कंस्ट्रक्टर्स, या ब्लॉक्स में घोषित किए जाते हैं। वे तब बनाए जाते हैं जब मेथड, कंस्ट्रक्टर, या ब्लॉक में प्रवेश किया जाता है और वेरिएबल नष्ट हो जाता है जब यह मेथड, कंस्ट्रक्टर, या ब्लॉक से बाहर निकलता है। लोकल वेरिएबल्स के लिए एक्सेस मॉडिफायर्स का उपयोग नहीं किया जा सकता। लोक