उदाहरण
class InnerSuper{
void mInner(){}
}
class Outer{
int aOuter=10;
InnerSuper mOuter(){
int aLocal=3999;
class Inner extends InnerSuper{
int aInner=20;
void mInner(){
System.out.println("a Inner : "+aInner);
System.out.println("a local : "+aLocal);
}
}
Inner iob=new Inner();
return iob;
}
}
class Demo{
public static void main(String args[]){
Outer ob=new Outer();
InnerSuper iob=ob.mOuter();
iob.mInner();
}
}
यह जावा 1.8 या इसके बाद के संस्करण में किसी भी त्रुटि उत्पन्न नहीं करेगा निम्नलिखित पर विचार करें। लेकिन पिछले संस्करण में इस लिए कह स्पष्ट रूप से स्थानीय चर के रूप में अंतिम भीतरी वर्ग के भीतर पहुँचा घोषित करने के लिए एक त्रुटि उत्पन्न करता है। क्योंकि संकलक क्या करता है यह आंतरिक वर्ग द्वारा उपयोग की जाने वाली स्थानीय चर की एक प्रति रखेगा ताकि प्रतिलिपि मौजूद हो, भले ही विधि/ब्लॉक समाप्त हो और स्थानीय चर गुंजाइश से बाहर हो। यह घोषणा करने के लिए हमें पूछता है अंतिम चर स्थानीय भीतरी कक्षा के बाद गतिशील बाद में अपने मूल्य को परिवर्तित करता है कार्यक्रम में या गुमनाम वर्ग घोषित किया जाता है, प्रति संकलक द्वारा बनाई गई अपनी नई मूल्य के लिए परिवर्तन नहीं होगा क्योंकि और अनुमानित आउटपुट का उत्पादन न करके आंतरिक कक्षा के भीतर समस्याएं पैदा कर सकता है। इसलिए यह हमें स्पष्ट रूप से अंतिम घोषित करने की सलाह देता है।
लेकिन जावा 1.8 में यह एक त्रुटि उत्पन्न नहीं करेगा क्योंकि संकलक एक्सेस किए गए स्थानीय चर को अंतिम रूप से अंतिम घोषित करता है। यह जावा डॉक्स
एक अनाम वर्ग में इस प्रकार इसका आवरण गुंजाइश है कि अंतिम या प्रभावी ढंग से अंतिम के रूप में घोषित नहीं कर रहे हैं में स्थानीय चर उपयोग नहीं कर सकते कहा गया है।
मुझे समझाने दें कि प्रभावी रूप से अंतिम रूप से क्या मतलब है। उपरोक्त प्रोग्राम
class Outer{
int aOuter=10;
InnerSuper mOuter(){
int aLocal=3999;
class Inner extends InnerSuper{
int aInner=20;
void mInner(){
System.out.println("a Inner : "+aInner);
System.out.println("a local : "+aLocal);
}
}
aLocal=4000;
Inner iob=new Inner();
return iob;
}
}
जावा में भी 1.8 में यह एक त्रुटि उत्पन्न करेगा। इसका कारण यह है alocal गतिशील कार्यक्रम के भीतर निर्दिष्ट किया जाए। इसका मतलब है कि परिवर्तक को प्रभावी ढंग से अंतिम संकलक द्वारा नहीं माना जा सकता है। क्या मैं संकलक समझ लिया है से के रूप में चर जो गतिशील रूप से अंतिम रूप में नहीं बदल रहे हैं की घोषणा की।इसे चर कहा जाता है प्रभावी रूप से अंतिम है।
इसलिए यह अनुशंसा की जाती है कि आप स्थानीय आंतरिक वर्ग या किसी अज्ञात वर्ग द्वारा किसी भी त्रुटि से बचने के लिए स्पष्ट रूप से अंतिम द्वारा उपयोग किए जाने वाले स्थानीय चर घोषित करें।
स्रोत
2017-07-30 06:13:56
'वही कारण केस पर लागू हो सकता है यदि हम अज्ञात वर्ग में गैर-अंतिम आवृत्ति चर का उपयोग करने का प्रयास करते हैं।' .... इसे किसी ऑब्जेक्ट के फ़ील्ड को इसके संदर्भ से एक्सेस करने के लिए कहा जाता है। ऑब्जेक्ट की उत्पत्ति या इसकी कक्षा की घोषणा क्यों होनी चाहिए? –
@ user2499800: क्या आपने मेरा जवाब देखा है? आप इसके साथ कहाँ पहुंचे हैं? यदि आप उत्तर देते हैं तो सराहना करेंगे ... :) –