2011-09-27 22 views
34

संभव डुप्लिकेट:
private final static attribute vs private final attributeजावा में स्थिर अंतिम चर

क्या रूप

static final int x = 5; 

या

final int x = 5; 
एक चर घोषित करने के बीच का अंतर है

यदि मैं केवल वैरिएबल को स्थानीय होना चाहता हूं, और स्थिर (बाद में बदला नहीं जा सकता)?

धन्यवाद

+2

यदि यह एक चर (एक क्षेत्र के विपरीत) है, तो यह स्थिर नहीं हो सकता है। – Thilo

+0

इस पर पहले [प्रश्न] (http://stackoverflow.com/questions/1415955/private-final-static-attribute-vs-private-final-attribute) में इस पर चर्चा की गई है। –

+0

यह वर्तमान में चिह्नित के रूप में एक डुप्लिकेट नहीं है। यह प्रश्न एक विधि-स्थानीय चर के साथ "स्थिर अंतिम" का उपयोग करने के बारे में पूछ रहा है, लिंक किया गया प्रश्न इसे कक्षा/ऑब्जेक्ट चर (किसी भी विधि परिभाषा के बाहर) के रूप में उपयोग कर रहा है। मुझे लगता है कि जवाब यह है कि एक विधि के भीतर से "अंतिम" का उपयोग करने से वह उस समय में "स्थिर अंतिम" करने की अपेक्षा कर सकता है।हालांकि, मैं सोच रहा हूं कि यह एक int के बजाय एक वस्तु थी, अगर उत्परिवर्तन परिणाम उत्पन्न कर सकता है जो इस अंतर्ज्ञान से अलग है। मैंने इसका परीक्षण नहीं किया है। किसी को पता है? – Apriori

उत्तर

31

बस अंतिम होने का इरादा प्रभाव होगा।

स्थिर घोषणा यह एक वर्ग चर कर रहा है, इस वर्ग के नाम <ClassName>.x.

5

पहले बयान में के माध्यम से पहुँचा दी जाएगी आप चर, जो वस्तुओं के सभी के लिए आम (वर्ग स्थिर क्षेत्र) को परिभाषित।

दूसरे कथन में आप चर परिभाषित करते हैं, जो प्रत्येक निर्मित वस्तु (बहुत सारी प्रतियां) से संबंधित है।

आपके मामले में आपको पहले का उपयोग करना चाहिए।

29

फ़ील्ड को 'अंतिम' घोषित करने से यह सुनिश्चित होगा कि क्षेत्र स्थिर है और बदल नहीं सकता है। अंतर 'स्थैतिक' कीवर्ड के उपयोग में आता है।

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

जैसा कि आप देख सकते हैं, क्षेत्र की स्थिरता दोनों मामलों में स्थिर होना चाहिए (क्षेत्र को 'अंतिम' और 'स्थिर अंतिम' के रूप में घोषित करना)।

इसी प्रकार के प्रश्न private final static attribute vs private final attribute

आशा है कि यह

3

आदिम प्रकार के लिए, एक उचित घोषणा 'अंतिम स्थिर' हो जाएगा मदद करता है एक निरंतर घोषित करने के लिए है। एक गैर स्थैतिक अंतिम चर समझ में आता है जब यह किसी ऑब्जेक्ट का निरंतर संदर्भ होता है। इस मामले में प्रत्येक उदाहरण में अपना संदर्भ हो सकता है, जैसा कि JLS 4.5.4 में दिखाया गया है।

सही उत्तर के लिए पावेल की प्रतिक्रिया देखें।

संबंधित मुद्दे