जावा यह: इसका उपयोग कहां और कैसे करें?

इस लेख में, हम जावा में इस कीवर्ड के बारे में जानेंगे कि कैसे और कहाँ इनका उपयोग उदाहरणों की मदद से किया जाता है।

इस खोजशब्द

जावा में, इस कीवर्ड का इस्तेमाल किसी ऑब्जेक्ट या कंस्ट्रक्टर के अंदर करंट ऑब्जेक्ट को रेफर करने के लिए किया जाता है। उदाहरण के लिए,

 class Main ( int instVar; Main(int instVar)( this.instVar = instVar; System.out.println("this reference = " + this); ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("object reference = " + obj); ) )

आउटपुट :

 यह संदर्भ = मुख्य @ 23fc625e वस्तु संदर्भ = मुख्य @ 23fc625e

उपरोक्त उदाहरण में, हमने क्लास मेन के ओब्ज नामक एक ऑब्जेक्ट बनाया। फिर हम thisकक्षा के ऑब्जेक्ट ओब्ज और कीवर्ड के संदर्भ को प्रिंट करते हैं ।

यहाँ, हम देख सकते हैं कि दोनों का संदर्भ thisएक ही है और एक ही है। इसका मतलब यह कुछ भी नहीं है, लेकिन वर्तमान वस्तु का संदर्भ है।

इस कीवर्ड का उपयोग

ऐसी विभिन्न परिस्थितियाँ हैं जहाँ thisआमतौर पर कीवर्ड का उपयोग किया जाता है।

इसका उपयोग Ambiguity Variable Names के लिए

जावा में, एक स्कोप (क्लास स्कोप या मेथड स्कोप) के अंदर एक ही नाम वाले दो या दो से अधिक वेरिएबल्स को घोषित करने की अनुमति नहीं है। हालाँकि, उदाहरण चर और मापदंडों का एक ही नाम हो सकता है। उदाहरण के लिए,

 class MyClass ( // instance variable int age; // parameter MyClass(int age)( age = age; ) )

उपरोक्त कार्यक्रम में, उदाहरण चर और पैरामीटर का एक ही नाम है: आयु। यहाँ, जावा कंपाइलर नाम अस्पष्टता के कारण भ्रमित है।

ऐसी स्थिति में, हम इस कीवर्ड का उपयोग करते हैं। उदाहरण के लिए,

पहले, आइए बिना thisकीवर्ड का उपयोग किए एक उदाहरण देखें :

 class Main ( int age; Main(int age)( age = age; ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("obj.age = " + obj.age); ) )

आउटपुट :

 मरज = ०

उपरोक्त उदाहरण में, हम 8कंस्ट्रक्टर के मान के रूप में पास हुए हैं। हालाँकि, हम 0एक आउटपुट के रूप में प्राप्त कर रहे हैं । ऐसा इसलिए है क्योंकि जावा कंपाइलर चर और पैरामीटर के बीच के नामों में अस्पष्टता के कारण भ्रमित हो जाता है।

अब, thisकीवर्ड का उपयोग करके उपरोक्त कोड को फिर से लिखें ।

 class Main ( int age; Main(int age)( this.age = age; ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("obj.age = " + obj.age); ) )

आउटपुट :

 obj.age = 8

अब, हमें अपेक्षित आउटपुट मिल रहा है। ऐसा इसलिए है क्योंकि जब कंस्ट्रक्टर को कॉल किया जाता है, thisतो कंस्ट्रक्टर के अंदर ऑब्जेक्ट ओब्ज द्वारा प्रतिस्थापित किया जाता है जिसे कंस्ट्रक्टर कहा जाता है। इसलिए आयु चर को मान 8 असाइन किया गया है।

इसके अलावा, अगर पैरामीटर और उदाहरण चर का नाम अलग है, तो संकलक स्वचालित रूप से इस कीवर्ड को जोड़ देता है। उदाहरण के लिए, कोड:

 class Main ( int age; Main(int i) ( age = i; ) )

के बराबर है:

 class Main ( int age; Main(int i) ( this.age = i; ) )

गेट्स एंड सेटर्स के साथ

thisकीवर्ड का एक और सामान्य उपयोग एक वर्ग के बसने और पाने के तरीकों में है। उदाहरण के लिए:

 class Main ( String name; // setter method void setName( String name ) ( this.name = name; ) // getter method String getName()( return this.name; ) public static void main( String() args ) ( Main obj = new Main(); // calling the setter and the getter method obj.setName("Toshiba"); System.out.println("obj.name: "+obj.getName()); ) )

आउटपुट :

 obj.name: तोशिबा

यहां, हमने thisकीवर्ड का उपयोग किया है :

  • सेटर विधि के अंदर मान निर्दिष्ट करने के लिए
  • प्राप्त करने की विधि के अंदर मूल्य तक पहुँचने के लिए

कंस्ट्रक्टर ओवरलोडिंग में इसका उपयोग करना

कंस्ट्रक्टर ओवरलोडिंग के साथ काम करते समय, हमें एक कंस्ट्रक्टर को दूसरे कंस्ट्रक्टर से मंगवाना पड़ सकता है। ऐसे मामले में, हम कंस्ट्रक्टर को स्पष्ट रूप से नहीं बुला सकते हैं। इसके बजाय, हमें thisकीवर्ड का उपयोग करना होगा ।

यहां, हम इस कीवर्ड के एक अलग रूप का उपयोग करते हैं। यही कारण है, this()। एक उदाहरण लेते हैं,

 class Complex ( private int a, b; // constructor with 2 parameters private Complex( int i, int j )( this.a = i; this.b = j; ) // constructor with single parameter private Complex(int i)( // invokes the constructor with 2 parameters this(i, i); ) // constructor with no parameter private Complex()( // invokes the constructor with single parameter this(0); ) @Override public String toString()( return this.a + " + " + this.b + "i"; ) public static void main( String() args ) ( // creating object of Complex class // calls the constructor with 2 parameters Complex c1 = new Complex(2, 3); // calls the constructor with a single parameter Complex c2 = new Complex(3); // calls the constructor with no parameters Complex c3 = new Complex(); // print objects System.out.println(c1); System.out.println(c2); System.out.println(c3); ) )

आउटपुट :

 2 + 3 आई 3 + 3 आई 0 + 0 आई

उपरोक्त उदाहरण में, हमने thisकीवर्ड का उपयोग किया है ,

  • कंस्ट्रक्टर Complex(int i, int j)से कंस्ट्रक्टर को बुलाने के लिएComplex(int i)
  • कंस्ट्रक्टर Complex(int i)से कंस्ट्रक्टर को बुलाने के लिएComplex()

लाइन नोटिस करें,

 System.out.println(c1);

यहां, जब हम ऑब्जेक्ट c1 को प्रिंट करते हैं, तो ऑब्जेक्ट स्ट्रिंग में परिवर्तित हो जाता है। इस प्रक्रिया में, toString()कहा जाता है। चूंकि हम toString()अपनी कक्षा के अंदर की विधि को ओवरराइड करते हैं , इसलिए हमें उस पद्धति के अनुसार आउटपुट मिलता है।

this()डुप्लिकेट कोड की मात्रा को कम करने के लिए एक बड़ा लाभ है। हालांकि, उपयोग करते समय हमें हमेशा सावधान रहना चाहिए this()

ऐसा इसलिए है क्योंकि किसी अन्य कंस्ट्रक्टर से कॉलिंग कंस्ट्रक्टर ओवरहेड जोड़ता है और यह एक धीमी प्रक्रिया है। उपयोग this()करने का एक और बड़ा फायदा डुप्लिकेट कोड की मात्रा को कम करना है।

नोट : किसी अन्य कंस्ट्रक्टर से एक कंस्ट्रक्टर को आमंत्रित करना स्पष्ट कंस्ट्रक्टर इनवोकेशन कहलाता है।

इसे तर्क के रूप में पारित करना

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

 class ThisExample ( // declare variables int x; int y; ThisExample(int x, int y) ( // assign values of variables inside constructor this.x = x; this.y = y; // value of x and y before calling add() System.out.println("Before passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); // call the add() method passing this as argument add(this); // value of x and y after calling add() System.out.println("After passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); ) void add(ThisExample o)( o.x += 2; o.y += 2; ) ) class Main ( public static void main( String() args ) ( ThisExample obj = new ThisExample(1, -2); ) )

आउटपुट :

 AddTwo () मेथड: x = 1, y = -2 में इसे पास करने से पहले addTwo () मेथड को पास करने के बाद: x = 3, y = 0

उपरोक्त उदाहरण में, कंस्ट्रक्टर के अंदर ThisExample(), लाइन को नोटिस करें,

 add(this);

यहां, हम add()इसे एक तर्क के रूप में पारित करके विधि कह रहे हैं । चूँकि इस कीवर्ड में क्लास के ऑब्जेक्ट ऑब्जेक्शन का संदर्भ होता है, इसलिए हम add()विधि के अंदर x और y के मान को बदल सकते हैं ।

दिलचस्प लेख...