logo

detta nyckelord i Java

Det kan vara mycket användning av Java detta nyckelord . I Java är detta en referensvariabel som hänvisar till det aktuella objektet.

java detta nyckelord

Användning av Java detta nyckelord

Här ges 6 användningen av java detta nyckelord.

  1. detta kan användas för att referera till aktuell klassinstansvariabel.
  2. detta kan användas för att anropa aktuell klassmetod (implicit)
  3. this() kan användas för att anropa aktuell klasskonstruktor.
  4. detta kan skickas som ett argument i metodanropet.
  5. detta kan skickas som argument i konstruktoranropet.
  6. detta kan användas för att returnera den aktuella klassinstansen från metoden.

Förslag: Om du är nybörjare med java, leta bara upp tre användningsområden för detta nyckelord.

Användning av Java detta nyckelord

1) detta: för att hänvisa till aktuell klassinstansvariabel

Detta nyckelord kan användas för att referera till aktuell klassinstansvariabel. Om det finns oklarheter mellan instansvariablerna och parametrarna, löser detta nyckelord problemet med tvetydighet.

Förstå problemet utan detta nyckelord

Låt oss förstå problemet om vi inte använder detta nyckelord genom exemplet nedan:

påskägg i Android
 class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ rollno=rollno; name=name; fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis1{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
Testa det nu

Produktion:

 0 null 0.0 0 null 0.0 

I exemplet ovan är parametrar (formella argument) och instansvariabler desamma. Så vi använder det här nyckelordet för att skilja lokal variabel och instansvariabel.

Lösning av ovanstående problem med detta nyckelord

 class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ this.rollno=rollno; this.name=name; this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis2{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
Testa det nu

Produktion:

 111 ankit 5000.0 112 sumit 6000.0 

Om lokala variabler (formella argument) och instansvariabler är olika, behöver du inte använda detta nyckelord som i följande program:

sträng av int

Program där detta nyckelord inte krävs

 class Student{ int rollno; String name; float fee; Student(int r,String n,float f){ rollno=r; name=n; fee=f; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis3{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
Testa det nu

Produktion:

 111 ankit 5000.0 112 sumit 6000.0 

Det är bättre att använda meningsfulla namn för variabler. Så vi använder samma namn till exempel variabler och parametrar i realtid, och använder alltid detta nyckelord.


2) detta: att åberopa aktuell klassmetod

Du kan anropa metoden för den aktuella klassen genom att använda detta nyckelord. Om du inte använder detta nyckelord, lägger kompilatorn automatiskt till detta nyckelord medan metoden anropas. Låt oss se exemplet

 class A{ void m(){System.out.println('hello m');} void n(){ System.out.println('hello n'); //m();//same as this.m() this.m(); } } class TestThis4{ public static void main(String args[]){ A a=new A(); a.n(); }} 
Testa det nu

Produktion:

 hello n hello m 

3) this(): för att anropa aktuell klasskonstruktor

This()-konstruktoranropet kan användas för att anropa den aktuella klasskonstruktorn. Den används för att återanvända konstruktorn. Med andra ord används det för konstruktörskedja.

Anropar standardkonstruktor från parametriserad konstruktor:

 class A{ A(){System.out.println('hello a');} A(int x){ this(); System.out.println(x); } } class TestThis5{ public static void main(String args[]){ A a=new A(10); }} 
Testa det nu

Produktion:

 hello a 10 

Anropar parameteriserad konstruktor från standardkonstruktor:

 class A{ A(){ this(5); System.out.println('hello a'); } A(int x){ System.out.println(x); } } class TestThis6{ public static void main(String args[]){ A a=new A(); }} 
Testa det nu

Produktion:

 5 hello a 

Verklig användning av detta() konstruktoranrop

This() konstruktoranropet ska användas för att återanvända konstruktorn från konstruktorn. Den upprätthåller kedjan mellan konstruktörerna, dvs den används för konstruktörskedja. Låt oss se exemplet nedan som visar den faktiska användningen av detta nyckelord.

 class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this(rollno,name,course);//reusing constructor this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis7{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }} 
Testa det nu

Produktion:

 111 ankit java 0.0 112 sumit java 6000.0 

Regel: Anrop till this() måste vara den första satsen i constructor.

 class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this.fee=fee; this(rollno,name,course);//C.T.Error } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis8{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }} 
Testa det nu

Produktion:

 Compile Time Error: Call to this must be first statement in constructor 

4) detta: att passera som ett argument i metoden

Detta nyckelord kan också skickas som ett argument i metoden. Den används främst vid eventhantering. Låt oss se exemplet:

markeringsram html
 class S2{ void m(S2 obj){ System.out.println('method is invoked'); } void p(){ m(this); } public static void main(String args[]){ S2 s1 = new S2(); s1.p(); } } 
Testa det nu

Produktion:

 method is invoked 

Tillämpning av detta som kan passeras som ett argument:

I händelsehantering (eller) i en situation där vi måste ge referens för en klass till en annan. Det används för att återanvända ett objekt i många metoder.


5) detta: att skicka som argument i konstruktoranropet

Vi kan även skicka detta nyckelord i konstruktorn. Det är användbart om vi måste använda ett objekt i flera klasser. Låt oss se exemplet:

skillnaden mellan $ och $$
 class B{ A4 obj; B(A4 obj){ this.obj=obj; } void display(){ System.out.println(obj.data);//using data member of A4 class } } class A4{ int data=10; A4(){ B b=new B(this); b.display(); } public static void main(String args[]){ A4 a=new A4(); } } 
Testa det nu
 Output:10 

6) detta nyckelord kan användas för att returnera aktuell klassinstans

Vi kan returnera detta nyckelord som ett uttalande från metoden. I sådana fall måste returtypen för metoden vara klasstypen (icke-primitiv). Låt oss se exemplet:

Syntax för detta som kan returneras som ett uttalande

 return_type method_name(){ return this; } 

Exempel på detta nyckelord som du returnerar som ett påstående från metoden

 class A{ A getA(){ return this; } void msg(){System.out.println('Hello java');} } class Test1{ public static void main(String args[]){ new A().getA().msg(); } } 
Testa det nu

Produktion:

 Hello java 

Bevisar detta nyckelord

Låt oss bevisa att detta nyckelord hänvisar till den aktuella klassens instansvariabel. I det här programmet skriver vi ut referensvariabeln och utdata från båda variablerna är samma.

 class A5{ void m(){ System.out.println(this);//prints same reference ID } public static void main(String args[]){ A5 obj=new A5(); System.out.println(obj);//prints the reference ID obj.m(); } } 
Testa det nu

Produktion:

 A5@22b3ea59 A5@22b3ea59