मैं this question on legality of forward references के माध्यम से रहा हूं लेकिन जावा भाषा में forward references
द्वारा इसका अर्थ स्पष्ट नहीं है। क्या कोई उदाहरण की मदद से समझा सकता है?जावा में आगे संदर्भ कहा जाता है?
उत्तर
यह विशेष रूप से एक संकलन त्रुटि है। और यह वर्ग परिवर्तनीय घोषणाओं के आदेश के बारे में सब कुछ है। के निदर्शी प्रयोजनों के लिए कुछ कोड का उपयोग करते हैं:
public class ForwardReference {
public ForwardReference() {
super();
}
public ForwardReference echoReference() {
return this;
}
public void testLegalForwardReference() {
// Illustration: Legal
this.x = 5;
}
private int x = 0;
// Illustration: Illegal
private ForwardReference b = a.reference();
private ForwardReference a = new ForwardReference();
}
आप देख सकते हैं, जावा चर की घोषणा आता है, भले ही आप एक वर्ग विधि में एक वर्ग चर संदर्भित करने के लिए अनुमति देता है विधि के बाद । यह एक (कानूनी) आगे संदर्भ का एक उदाहरण है, और इसके लिए समर्थन जावा कंपाइलर में बनाया गया है।
आप हालांकि ऐसा नहीं कर सकते हैं, एक वर्ग चर घोषित है 'एक' है कि एक और वर्ग चर 'बी' कि अभी तक घोषित नहीं किया गया है पर निर्भर करता है। आश्रित वर्ग परिवर्तनीय घोषणाएं उनकी निर्भरता के विपरीत क्रम में दिखाई देनी चाहिए।
एक स्पर्शरेखा पर, अधिकांश, यदि सभी आईडीई आपको चेतावनी नहीं देंगे कि आपके कोड में अवैध संदर्भ त्रुटियां हैं।
अवैध आगे संदर्भ जेएलएस के section 8.3.2.3 में शामिल हैं।
सरल शब्दों में इसका मतलब है संदर्भ (एक चर को एक्सेस करना, फ़ंक्शन को कॉल करना) जो कि कोड फ़ाइल में आगे है।
static int x=getY();
static int y=5;
static int getY() { return y; }
- एक्स के मूल्य Gety()
- Gety() का परिणाम के लिए निर्धारित है इससे पहले कि y के मूल्य 5
- एक्स के मान पर सेट है कहा जाता है इसलिए है 0 (डिफ़ॉल्ट पूर्णांक)
- वाई का मान 5
यह मूल रूप से सिर्फ आदेश है कि चीजें संकलक द्वारा पढ़ा जाता है, यदि आप
int c = 3
int a = b;
int b = 5;
है संकलक ऊपर से नीचे तक इसे पढ़ा होगा, तो यह होगा se पहली पंक्ति है, जो एक चर वाणी ' सी ', और इसे 3 तक असाइन करता है, और यह ठीक है, तो यह दूसरी पंक्ति का सामना करेगा, जो एक चर' ए 'घोषित करता है, और उसके बाद इसे' बी 'असाइन करने का प्रयास करता है।
लेकिन अब, कंपाइलर में कोई समस्या है: यह 'बी' चीज़ क्या है? यह अभी तक 'सी' के बारे में अभी तक सीखा है, और हाल ही में 'ए' है, लेकिन संकलक के बाद से इसे 'बी' नामक कोई जानकारी नहीं है, इसे अभी तक घोषित नहीं किया गया है। तो फिर, चूंकि संकलक सभी भ्रम को संभाल नहीं सकता है, यह बंद हो जाता है, और आपको यह पता लगाने के लिए छोड़ देता है कि आपने इसे क्रोधित करने के लिए क्या किया है।
तो, आगे संदर्भ भाग कुछ ऐसा संदर्भ होगा जो अभी तक मौजूद नहीं है। आगे समय शायद में ..
public class AnyCode {
void print() {
System.out.println("Value of j - " + j); // legal
System.out.println("Value of i - " + i); // legal
}
// CASE - 1
int k = i; // illegal
int i;
// CASE - 2
int l = j; // legal
static int m = j; // illegal
static int j;
// CASE - 3
A aObj = bObj; // illegal
B bObj = new B();
public static void main(String[] args) {
/*
Note :- here anyCode act as a local variable and get space on stack
whereas the object it is referring to is present on heap. And you
cannot forward reference a local variable.
*/
anyCode.print(); // 'Cannot find symbol' error
AnyCode anyCode = new AnyCode();
}
}
class A {
}
class B {
}
********* मामले का संदर्भ लें - 1 *********
फॉरवर्ड संदर्भित उदाहरण चर संकलक के रूप में अनुमति नहीं है नहीं है उस मूल्य के प्रकार के बारे में सुनिश्चित करें जिसे हम आगे संदर्भित कर रहे हैं या यह भी संभव हो सकता है कि ऐसा कोई चर मौजूद न हो।
एक उदाहरण पर विचार करें: - आगे संदर्भित उपरोक्त मामले में अनुमति दी है
int a = b;
boolean b = false;
तो यह एक तबाही बना सकता है।
int a = b; // What is b? is it a primitive variable or a value or a object reference
ऊपर के उदाहरण में मैं ख घोषित करने के लिए है और अब इस तरह का असाइनमेंट जावा द्वारा अनुमति दी गई है, तो यह एक बुरा सपना हो जाएगा नहीं करने का फैसला किया है।
********** मामले का संदर्भ लें - 2 *********
स्थैतिक चर उदाहरण चर से पहले लोड किए गए हैं और इसलिए आगे स्थैतिक चर संदर्भित और उन्हें उदाहरण चर के लिए बताए पूरी तरह ठीक है
- 1. @INC में एक उपराउटिन संदर्भ कब कहा जाता है?
- 2. आगे इंवेक्शन नहीं कहा जा रहा है?
- 3. संदर्भ प्रारंभिक() को कई बार क्यों कहा जाता है?
- 4. स्थानीय चर को जावा में "स्वचालित" क्यों कहा जाता है?
- 5. स्काला और आगे संदर्भ
- 6. सी में आगे का संदर्भ क्या है?
- 7. कन्स्ट्रक्टर कहां कहा जाता है?
- 8. View.post() नहीं कहा जाता है?
- 9. PyEval_InitThreads कब कहा जाता है?
- 10. कब देखेंDidLoad कहा जाता है?
- 11. पेज_PreInit नहीं कहा जाता है?
- 12. जब __repr __() कहा जाता है?
- 13. emacs में अंगूठी कहा जाता है?
- 14. स्कैला में क्या => कहा जाता है?
- 15. किस परिस्थितियों में __rmul__ कहा जाता है?
- 16. "ऑपरेटर <<" क्या कहा जाता है?
- 17. जावा जेनेरिक्स में टाइप करें पैरामीटर के आगे संदर्भ
- 18. आगे वर्ग संदर्भ?
- 19. जावा: NullPointerExceptions को NullReferenceExceptions क्यों नहीं कहा जाता है?
- 20. टीडीडी 'स्पाइक्स' क्यों 'स्पाइक्स' कहा जाता है?
- 21. से पहले और जावा में एक कहा जाता विधि
- 22. सी # में एक स्थिर कन्स्ट्रक्टर कब कहा जाता है?
- 23. अप्रत्याशित अधिभार कोड निम्नलिखित जब समारोह variadic टेम्पलेट इन्स्टेन्शियशन से कहा जाता है कहा जाता है
- 24. Httpcontext.Session Application_Start विधि में कहा जाता है Ninject
- 25. कब डेलोक विधि कहा जाता है?
- 26. View.onDraw() --- इसे कब कहा जाता है?
- 27. इसे शून्य क्यों कहा जाता है?
- 28. awakeFromNib विधि कहा जाता है कई बार
- 29. UIViewController: viewWillAppear कहा जाता है, viewDidAppear नहीं
- 30. शुद्ध आभासी विधि कहा जाता है