2011-06-21 12 views
15

निम्न मानें:जावा में, स्थैतिक तरीकों के भीतर घोषित वेरिएबल्स स्थिर हैं?

 
private static boolean A() 
{ 
    int parsedUntil = 0; 
    ... 
    ... 
    ... 
} 

पार्स किया गया है एक स्थिर चर माना जाता है? मैंने देखा कि मैं इसे इस स्थिर कार्य के अंदर स्थैतिक घोषित नहीं कर सकता।

अनुवर्ती प्रश्न: मैंने पढ़ा है कि एक स्थैतिक चर केवल एक बार शुरू किया जाएगा। क्या इसका मतलब है कि पहली बार जब मैं फंक्शन ए() को कॉल करता हूं तो मान शून्य पर सेट हो जाएगा, लेकिन हर बार जब मैं ए() को कॉल करता हूं, तो उस पंक्ति को छोड़ दिया जाता है?

उत्तर

23

नहीं, यह एक स्थिर चर नहीं है। यह एक स्थानीय चर है। किसी विधि में घोषित कोई वैरिएबल एक स्थानीय चर है। आप एक स्थिर चर चाहते हैं, आप विधि के बाहर यह घोषणा करने के लिए है:

private static int parsedUntil = 0; 

एक स्थिर चर जो केवल एक ही विधि के भीतर इस्तेमाल किया जा सकता घोषित करने का कोई रास्ता नहीं है।

+1

यह सब कुछ दायरे के बारे में है। विधि प्रकार के बावजूद, दायरा विधि के लिए स्थानीय है। – Robin

+2

@ रोबिन: नहीं, यह जीवनभर के बारे में है। अन्य लैंगुग्स में, "स्थैतिक स्थानीय" में एक एकल विधि का दायरा हो सकता है लेकिन स्थैतिक जीवनकाल, जो कभी-कभी उपयोगी होता है; दोनों मामलों में दायरा विधि के लिए स्थानीय है, लेकिन जीवनकाल अलग है। – configurator

6

नहीं, A() एक स्थिर तरीका है, और parsedUntil ए के अंदर एक स्थानीय चर

संशोधक static की तरह स्थानीय चर में मान्य नहीं हैं (केवल final afaik की अनुमति दी है)

फ़ॉलो-अप है प्रश्न: मैंने पढ़ा है कि स्थैतिक चर केवल एक बार आरंभ किया जाएगा।

सच

है कि पहली बार मैं समारोह ए() मूल्य शून्य पर सेट हो जाएगा फोन मतलब है, लेकिन हर अन्य बार मैं एक() कहते हैं, तो उस पंक्ति है छोड़े गए?

पार्स किए जाने के बाद से एक स्थिर क्षेत्र नहीं है, लेकिन एक स्थैतिक विधि में एक स्थानीय चर, यह मामला नहीं है।

+0

लेकिन अगर मैं इसे फ़ंक्शन के अंदर अंतिम घोषित करता हूं तो इसका क्या अर्थ होगा? कक्षाओं के बारे में मैंने पढ़ा कि अंतिम कीवर्ड का अर्थ है कि इस तरह के वर्ग के कार्यों को उप-वर्गों द्वारा अधिभारित नहीं किया जा सकता है। (शायद इस तरह के वर्गों को भी बढ़ाया नहीं जा सकता है !?) स्थानीय चर में –

+0

, अंतिम मतलब है कि चर को फिर से असाइन नहीं किया जा सकता –

5

static चर को स्थानीय रूप से तरीकों से घोषित नहीं किया जा सकता है - वे केवल कक्षा के सदस्य हो सकते हैं, और कक्षा लोड होने पर उन्हें प्रारंभ किया जाता है।

+0

धन्यवाद! जब आप कहते हैं कि वे केवल कक्षा के सदस्य ही हो सकते हैं, मुझे याद है कि मैंने इसे पढ़ लिया है और यह समझ में आता है! –

1

जावा में स्थिर स्थानीय चर जैसे सी या सी ++ नहीं हैं, इसलिए आपके पास कभी भी static int parsedUtil = 0; नहीं हो सकता है।

तो नहीं, parsedUtil किसी भी अर्थ में "स्थैतिक" नहीं है। विधि को निष्पादित होने पर हर बार इसका मान 0 तक शुरू होता है।

+0

जावा में स्थानीय चर प्रारंभ नहीं किए गए हैं। – Ian

+0

@Ian - जेएलएस 14.4.2 के अनुसार: "* यदि एक [स्थानीय चर] घोषणाकर्ता के पास प्रारंभकर्ता है, तो प्रारंभकर्ता का मूल्यांकन किया जाता है और इसका मान चर के लिए असाइन किया जाता है। *" यह मेरे लिए काफी करीब है;) –

+0

उचित बिंदु । लेकिन, क्लास या इंस्टेंस स्कोप में चर के विपरीत जावा ** डिफ़ॉल्ट ** द्वारा कोई प्रारंभिक प्रदर्शन नहीं करता है। यही वह बिंदु था जिसे मैं बनाने की कोशिश कर रहा था, हालांकि आपके जवाब को फिर से पढ़ना मुझे लगता है कि यह वास्तव में इस मामले में लागू नहीं होता है। मेरी गलती। – Ian

1

कोई यह सी

नहीं है

parsedUntil स्थिर नहीं है। यह सिर्फ एक स्थानीय चर है। आप विधि के अंदर स्थैतिक चर घोषित नहीं कर सकते हैं।

दूसरे प्रश्न के संबंध में - स्थैतिक चर को जितनी बार चाहें उतनी बार असाइन किया जा सकता है। आप केवल अंतिम चर को पुन: असाइन नहीं कर सकते हैं।

+0

स्थिर बनाम अंतिम के बारे में महान स्पष्टीकरण, धन्यवाद! –

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