Java में this
Tin.java में क्लास Tin लिखें जिसमें int फ़ील्ड size हो और कंस्ट्रक्टर Tin(int size) जो this.size = size; सेट करे। Lab.java में Tin t = new Tin(7); से एक tin बनाएँ, फिर t.size प्रिंट करें। दोनों फ़ाइलें कंपाइल करें और java Lab चलाएँ। स्क्रीन एक लाइन दिखाए: 7। पैरामीटर और फ़ील्ड दोनों का नाम size है। शब्द this ऑब्जेक्ट पर फ़ील्ड का नाम बताता है ताकि जमा सही जगह पहुँचे। नाम टकराएँ तो this का इस्तेमाल — यही इस पेज का पाठ है।
एक ही नाम को this क्यों चाहिए
कंस्ट्रक्टर पेज पर पैरामीटर n था और फ़ील्ड size, इसलिए size = n; साफ़ था। यहाँ दोनों नाम size हैं। कंस्ट्रक्टर के अंदर अकेला size मतलब पैरामीटर। size = size; लिखना पैरामीटर को खुद पर कॉपी करता है और फ़ील्ड डिफ़ॉल्ट पर रह जाती है। ऑब्जेक्ट की फ़ील्ड अभी लिखी जानी चाहिए। वह लेखन बाईं ओर this.size से होता है।
पहले Tin.java बनाएँ। public class लाइन public class Tin है। यहाँ पुराना Box या Cup क्लास नाम न छोड़ें। ब्रेसेस के अंदर int size; घोषित करें। फिर कंस्ट्रक्टर लिखें: Tin(int size) { this.size = size; }। Tin.java में main नहीं है। कंपाइल से पहले सेव करें।
असाइनमेंट एक बार फिर पढ़ें। दाईं ओर size वह मान है जो पैरामीटर में आया — यहाँ 7। बाईं ओर this.size बन रहे ऑब्जेक्ट की फ़ील्ड है। लाइन चलने के बाद उस ऑब्जेक्ट का size 7 रखता है। अगर आप this. हटाकर size = size; रखें, बाद में स्क्रीन 0 दिखाती है क्योंकि फ़ील्ड बदली ही नहीं।
public class Tin {
int size;
Tin(int size) {
this.size = size;
}
}
Lab एक tin बनाता है
उसी फ़ोल्डर में Lab.java बनाएँ। इसकी public class लाइन public class Lab है। main के अंदर लिखें Tin t = new Tin(7); फिर System.out.println(t.size);। आर्गुमेंट 7 कंस्ट्रक्टर पैरामीटर size बन जाता है। कंस्ट्रक्टर उसे this.size = size; से जमा करता है। इस पेज पर अलग t.size = 7; लाइन की ज़रूरत नहीं।
Lab को वही क्लास रखें जिसमें main है। इस पाठ के लिए main को Tin के अंदर न डालें। अगर कंस्ट्रक्टर पेज का बचा Hall फ़ाइल अभी फ़ोल्डर में है, इस पाठ के लिए java Hall न चलाएँ — Tin.java और Lab.java कंपाइल करने के बाद java Lab चलाएँ।
public class Lab {
public static void main(String[] args) {
Tin t = new Tin(7);
System.out.println(t.size);
}
}
जिस फ़ोल्डर में दोनों फ़ाइलें हैं वहाँ से javac Tin.java Lab.java चलाएँ। दोनों पूरा होने पर आप पहले Tin.java और फिर Lab.java कंपाइल कर सकते हैं। जब कोष्ठक, ब्रेसेस और सेमीकोलन मिलते हैं तो javac अपनी कोई लाइन नहीं लिखता। फिर java Lab चलाएँ — java Lab.java नहीं, और java Tin भी नहीं। रन कमांड से .java अंत हटाएँ। वही क्लास शुरू करें जिसमें main है। वही कमांड Windows और macOS पर चलते हैं।
प्रोग्राम एक लाइन प्रिंट कर रुकना चाहिए: 7। आपसे टाइप नहीं माँगना चाहिए। अगर टर्मिनल कीबोर्ड इनपुट का इंतज़ार करे तो किसी पुराने अभ्यास की nextLine कॉल अभी किसी फ़ाइल में है। वह कॉल हटाएँ और Lab में new Tin(7) के साथ प्रिंट रखें, Tin में this.size = size; के साथ।
रन को एक बार चलाकर देखें। Java Lab.main से शुरू होता है। एक्सप्रेशन new Tin(7) एक Tin बनाता है और Tin(int size) को पैरामीटर बराबर 7 से बुलाता है। बॉडी this.size = size लिखती है, इसलिए ऑब्जेक्ट की फ़ील्ड 7 हो जाती है। फिर main t.size प्रिंट करता है और स्क्रीन 7 दिखाती है।
अगर आप this.size = size; की जगह size = size; लिखें, int के लिए फ़ील्ड 0 पर रहती है। तब स्क्रीन 0 दिखाती है, 7 नहीं। यही आमतौर पर संकेत है कि this गायब है। असाइनमेंट की बाईं ओर this. वापस लगाएँ।
this.size और size साथ-साथ
एक छोटी तालिका कंस्ट्रक्टर के अंदर दोनों नाम साफ़ रखती है।
📊 this.size vs size
| नाम | Tin(int size) में अर्थ |
|---|---|
size अकेला |
वह पैरामीटर जो कंस्ट्रक्टर में आया |
this.size |
बन रहे ऑब्जेक्ट की फ़ील्ड |
this.size = size; |
पैरामीटर को फ़ील्ड में जमा करो |
size = size; |
फ़ील्ड अपडेट नहीं करता |
तालिका सिर्फ़ याद दिलाने के लिए है। जो टाइप की लाइन आप रखते हैं वह कंस्ट्रक्टर में this.size = size; है, फिर Lab में Tin t = new Tin(7); और System.out.println(t.size);। |
कंस्ट्रक्टर पेज से तुलना
कंस्ट्रक्टर पेज पर Box(int n) { size = n; } इसलिए काम करता था क्योंकि n और size अलग शब्द थे। वह आकार अभी भी काम करता है। यह पेज जानबूझकर एक ही शब्द दो बार इस्तेमाल करता है ताकि आपको this चाहिए। बचा हुआ Box और Hall डेमो जिसमें size = n; हो अलग पाठ है। इस पेज के लिए Tin और Lab तथा this.size = size; रखें।
सिर्फ़ t को System.out.println(t); से प्रिंट करने पर साफ़ 7 नहीं दिखता। जमा संख्या देखने के लिए t.size प्रिंट करें। अकेला ऑब्जेक्ट रेफ़रेंस फ़ील्ड मान नहीं है।
दूसरे दिनों आप अभी भी अलग पैरामीटर नाम चुन सकते हैं। यह पाठ जानबूझकर मेल खाते नाम चुनता है। इस पेज पर एक ही Tin डेमो में n और this न मिलाएँ। एक साफ़ मार्ग काफ़ी है: मेल खाते नाम, फ़ील्ड पर this, फ़ील्ड प्रिंट।
दो tin अलग ही रहते हैं
हर new Tin(...) अलग ऑब्जेक्ट के लिए कंस्ट्रक्टर फिर चलाता है। आप Tin a = new Tin(2); और Tin b = new Tin(9); लिख सकते हैं, फिर दोनों size फ़ील्ड प्रिंट करें। हर कॉल अपने ऑब्जेक्ट पर this.size = size; इस्तेमाल करती है। दोनों ऑब्जेक्ट एक ही size स्लॉट साझा नहीं करते। उस जाँच के लिए दूसरी कोड बॉक्स की ज़रूरत नहीं — जब आपने 7 देख लिया तो Lab में संख्याएँ एक बार बदलें, या एक-tin डेमो को वही फ़ाइल रखें जो आप सेव करते हैं।
अगर दोनों लाइनें 0 दिखाएँ तो कंस्ट्रक्टर में बाईं ओर अभी भी this नहीं है। अगर Lab.java कंपाइल करते समय javac को Tin न मिले तो जाँचें कि Tin.java उसी फ़ोल्डर में है और क्लास लाइन public class Tin है।
इंस्टेंस मेथड के लिए क्या बचता है
यह पेज this का इस्तेमाल सिर्फ़ कंस्ट्रक्टर में फ़ील्ड जमा करने के लिए करता है। बाद का पेज — इंस्टेंस मेथड — ऐसी मेथड दिखाता है जो ऑब्जेक्ट पर चलती हैं और फ़ील्ड पढ़ या बदल सकती हैं। यहाँ कंस्ट्रक्टर जमा पर रहें। इस पाठ के लिए Tin पर अतिरिक्त मेथड न गढ़ें जब तक पहले से न जानते हों; पाठ का लक्ष्य नाम मिलने पर this.size = size है।
अगर Lab में कंस्ट्रक्टर डेमो का Box b = new Box(4); अभी है और इस फ़ोल्डर में वह Box क्लास नहीं जिसे आप रखना चाहते, वह लाइन हटाएँ। Tin t = new Tin(7); और System.out.println(t.size); रखें। जब आप Tin सिखा रहे हों कंपाइलर आपके लिए Box नहीं गढ़ेगा।
जब फ़ोल्डर में अभी भी Box.java या Hall.java हों, उन्हें छोड़ दें या सिर्फ़ तभी हटाएँ जब वे आपकी कंपाइल कमांड उलझाएँ। इस पाठ की Tin और Lab जोड़ी कंपाइल करने के बाद java Lab चलाएँ।
इंस्टेंस मेथड से पहले
आप int size; घोषित कर सकते हैं, Tin(int size) { this.size = size; } लिख सकते हैं, और Lab से Tin t = new Tin(7); बना सकते हैं। दोनों फ़ाइलें कंपाइल करें और java Lab चलाएँ। स्क्रीन 7 दिखाती है। शब्द this ऑब्जेक्ट की फ़ील्ड नामता है जब पैरामीटर वही नाम इस्तेमाल करता है। आपने निर्माण के समय संख्या दी, कंस्ट्रक्टर ने this से जमा किया, और प्रिंट ने जमा साबित किया। अगला पेज इंस्टेंस मेथड है, जहाँ ऑब्जेक्ट पर मेथड ऑब्जेक्ट बनने के बाद फ़ील्ड इस्तेमाल करती हैं।
कंस्ट्रक्टर हेडर बिना void रखें। फ़ील्ड पर this. रखें। प्रिंट t.size पर रखें। आगे बढ़ने से पहले ये तीन आदतें इस पेज का चेकपॉइंट हैं।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी