2013-03-16 5 views
5

के अंदर यह संदर्भ मैं देख रहा हूं प्रोग्रामिंग पद्धति (स्टैनफोर्ड) (CS106A) जावा पर पाठ्यक्रम। lecture 14 में प्रोफेसर सहमी ने जावा में स्मृति आवंटन और स्टैक और ढेर पर ऑब्जेक्ट के लिए स्मृति आवंटन के बारे में बताया।इस संदर्भ में construstor

उन्होंने कहा कि किसी ऑब्जेक्ट पर बुलाए गए किसी भी विधि के लिए, एक स्टैक आवंटित किया जाता है और तर्क सूची और यह संदर्भ स्टैक पर स्थान आवंटित किया जाता है। के माध्यम से यह refernece संग्रहीत, जावा किसी ऑब्जेक्ट के सही इंस्टेंस चर को संदर्भित करने में सक्षम है।

stack--when method is called

लेकिन निर्माता कोई इस संदर्भ के लिए तर्क सूची के साथ संग्रहीत के रूप में वस्तु का निर्माण किया जा रहा है है। stack -- when constructor is called

मेरे प्रश्न करता है, तो निर्माता तो बस एक जावा कीवर्ड के लिए आप वर्तमान वस्तु को संदर्भित करने की अनुमति देता है इस refernece है कि कैसे हम पूर्व

public class foo { 
private int i; 
public foo(int i) 
{this.i = i;// where this reference came from} 
       } 

उत्तर

1

this के लिए निर्माता के अंदर उपयोग कर सकते हैं नहीं है। इसका इस्तेमाल किसी भी वर्ग में किया जा सकता है।

this कीवर्ड का उपयोग करने का उद्देश्य स्थानीय चर के संदर्भ को रोकने के लिए है।

यह आपके उदाहरण में की जरूरत है, i = i के बाद से पूरी तरह से कुछ भी नहीं होगा, क्योंकि दोनों एक ही स्थानीय चर (नहीं वर्ग चर) के लिए संदर्भ:

From here:

एक उदाहरण विधि के भीतर या एक कन्स्ट्रक्टर, यह वर्तमान ऑब्जेक्ट का संदर्भ है - ऑब्जेक्ट जिसकी विधि या कन्स्ट्रक्टर कहा जा रहा है। आप वर्तमान ऑब्जेक्ट के किसी भी सदस्य को उदाहरण विधि या किसी कन्स्ट्रक्टर के भीतर इसका उपयोग करके संदर्भित कर सकते हैं।

संपादित करें:

मुझे लगता है कि आप हो सकता है वास्तविक स्मृति पते के बारे में पूछ कर दिया गया।

मैं कल्पना

class Point 
{ 
    int x, y; 
    Point(int x, int y) { this.x = x; this.y = y; } 
    void move(int a, int b) { x = a; y = b; } 
} 
Point p = new Point(3,4); 
p.move(1,2); 

की तरह कुछ करने के लिए अनुवाद हो सकता है:

class Point 
{ 
    int x, y; 
    static Point getPoint(int x, int y) 
    { Point this = allocateMemory(Point); this.x = x; this.y = y; } 
    static void move(Point this, int a, int b) { this.x = a; this.y = b; } 
} 
Point p = Point.getPoint(3,4); 
Point.move(p, 1, 2); 

(this स्पष्ट करते हुए) लेकिन यह सब एक बहुत कम स्तर पर हो सकता है, तो यह वास्तव में नहीं लग रही हैं इस तरह से दूरस्थ रूप से, लेकिन यह आपके बारे में सोचने का एक तरीका हो सकता है।

+0

क्या आपको सही चीज़ पता है ??? वैसे धन्यवाद यह मिल गया .... –

+0

@ टीजे। नहीं, मुझे नहीं पता कि वास्तव में क्या होता है, केवल मूल विचार। – Dukeling

0

यह सब वर्तमान ऑब्जेक्ट के क्लास लेवल वैरिएबल का संदर्भ देता है।
यदि this कीवर्ड का उपयोग नहीं किया गया है तो चर विधि विधि चर में संग्रहीत किया जाएगा।

public class foo { 
    private int i; 

    public foo(int i) { 
     this.i = i; // stores the argument i into the class level variable i 
    } 

    public foo2(int i) { 
     i = i; // stores the argument i into the argument i 
    } 
} 
संबंधित मुद्दे