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

Java में static final वेरिएबल को कंस्ट्रक्टर में आरंभ क्यों नहीं किया जा सकता?

एक static final वेरिएबल (कांस्टेंट) को घोषणा पर या स्थैतिक ब्लॉक में आरंभ किया जाना चाहिए। कंस्ट्रक्टर में आरंभ करने का प्रयास संकलन त्रुटि का कारण बनता है क्योंकि कंपाइलर इसे पुनर्असाइनमेंट के रूप में व्याख्या करता है।

गलत: कंस्ट्रक्टर में आरंभीकरण

class Data {
    static final int num;
    Data(int i) {
        num = i; // संकलन त्रुटि
    }
}

संकलन त्रुटि

ConstantsExample.java:4: error: cannot assign a value to final variable num
    num = i;
    ^

सही: स्थैतिक ब्लॉक में आरंभीकरण

class Data {
    static final int num;
    static {
        num = 1000; // अनुमत
    }
}

public class ConstantsExample {
    public static void main(String args[]) {
        System.out.println("value of the constant: " + Data.num);
    }
}

आउटपुट

value of the constant: 1000

कारण

  • स्थैतिक फ़ील्ड्स क्लास लोडिंग के दौरान आरंभ होती हैं, इंस्टेंस निर्माण से पहले।
  • कंस्ट्रक्टर प्रति इंस्टेंस चलते हैं; एक final स्थैतिक फ़ील्ड को कई बार असाइन नहीं किया जा सकता।
  • स्थैतिक ब्लॉक क्लास लोड होने पर एक बार चलता है।
  1. - क्या हम Java में blank final वेरिएबल को इनिशियलाइज़ कर सकते हैं

    हां! आप कंस्ट्रक्टर या इंस्टेंस इनिशियलाइज़ेशन ब्लॉक में blank final वेरिएबल को इनिशियलाइज़ कर सकते हैं।

  1. - Java में कंस्ट्रक्टर final क्यों नहीं हो सकता

    final कीवर्ड एक मेथड को ओवरराइड होने से रोकता है। एक कंस्ट्रक्टर को ओवरराइड नहीं किया जा सकता, Java इसे final के रूप में चिह्नित करने की अनुमति नहीं देता।

  1. - Java में Final Variable

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