एक स्थिर अंतिम चर उपयोग से पहले शुरू किया जाना चाहिए। इसे सीधे घोषणा समय, या एक स्थिर ब्लॉक में शुरू किया जा सकता है।
लेकिन जब आप class.var = x
का उपयोग करते हैं तो इसे प्रारंभिक रूप में नहीं बल्कि एक असाइनमेंट के रूप में देखा जाता है।
जेडीके 7 के साथ, त्रुटि अंतिम चर पर मान निर्दिष्ट नहीं कर सकता है।
बताते हैं यही कारण है कि यह काम करता है अगर आप final
कीवर्ड
class Test {
static final int a = 2; // initialization at declaration time
static final int b;
static final int c;
static {
b = 4; // initialization in static block
Test.c = 6; // error : cannot assign a value to final variable c
}
...
}
संपादित
JLS में प्रारंभ के लिए सही शब्द JLS से निश्चित assignement
निकालें है निकालें:
स्थानीय वी के प्रत्येक उपयोग के लिए पहुंच योग्य या खाली अंतिम फ़ील्ड x, x निश्चित रूप से एक्सेस से पहले असाइन किया जाना चाहिए, या संकलन-समय त्रुटि उत्पन्न होती है।
इसी प्रकार, प्रत्येक रिक्त अंतिम चर को सबसे अधिक बार असाइन किया जाना चाहिए; यह होना चाहिए जब इसे असाइनमेंट होता है तो निश्चित रूप से असाइन नहीं किया जाता है।
इस तरह के एक काम करता है, तो और होने के लिए परिभाषित किया गया है केवल यदि या तो चर का सरल नाम (या एक क्षेत्र के लिए, अपने सरल नाम इस के योग्य) एक के बाएं हाथ की पक्ष पर होता है असाइनमेंट ऑपरेटर।
एक खाली अंतिम चर के लिए हर काम के लिए, चर काम से पहले निश्चित रूप से असाइन नहीं किए गए होना चाहिए, या एक संकलन समय त्रुटि उत्पन्न होती है।
मेरा जोर देता है, लेकिन मुझे लगता है कि यह त्रुटि का वास्तविक कारण है।
स्रोत
2014-12-16 14:09:54
क्योंकि आपकी कक्षा अभी तक प्रारंभिक नहीं है जब आप एक स्थिर प्रारंभकर्ता में हैं? इसके अलावा शायद क्योंकि जेएलएस इसे मना करता है ... – fge
क्या आप रुचि रखते हैं कि "जेएलएस का कौन सा हिस्सा इस पर प्रतिबंध लगाता है" या "इस तरह से डिजाइन की गई भाषा क्यों थी"? –
यहां गलत हो सकता है, लेकिन शायद इसकी वजह है कि आपके पास 'test'b' को 'अंतिम' –