एक 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 स्थैतिक फ़ील्ड को कई बार असाइन नहीं किया जा सकता।
- स्थैतिक ब्लॉक क्लास लोड होने पर एक बार चलता है।