logo

dette søgeord i Java

Der kan være meget brug af Java dette søgeord . I Java er dette en referencevariabel der henviser til det aktuelle objekt.

java dette søgeord

Brug af Java dette søgeord

Her er givet de 6 brug af java dette søgeord.

  1. dette kan bruges til at henvise til den aktuelle klasseforekomstvariabel.
  2. dette kan bruges til at påberåbe den nuværende klassemetode (implicit)
  3. this() kan bruges til at kalde den aktuelle klassekonstruktør.
  4. dette kan sendes som et argument i metodekaldet.
  5. dette kan sendes som argument i konstruktørkaldet.
  6. dette kan bruges til at returnere den aktuelle klasseinstans fra metoden.

Forslag: Hvis du er nybegynder til java, skal du kun finde tre anvendelser af dette søgeord.

Brug af Java dette søgeord

1) dette: at henvise til den aktuelle klasseinstansvariabel

Dette nøgleord kan bruges til at henvise til den aktuelle klasseforekomstvariabel. Hvis der er tvetydighed mellem instansvariablerne og -parametrene, løser dette nøgleord problemet med tvetydighed.

Forstå problemet uden dette søgeord

Lad os forstå problemet, hvis vi ikke bruger dette søgeord i eksemplet nedenfor:

c kode abs
 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(); }} 
Test det nu

Produktion:

 0 null 0.0 0 null 0.0 

I ovenstående eksempel er parametre (formelle argumenter) og instansvariabler de samme. Så vi bruger dette nøgleord til at skelne mellem lokal variabel og instansvariabel.

Løsning af ovenstående problem med dette søgeord

 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(); }} 
Test det nu

Produktion:

lang til streng java
 111 ankit 5000.0 112 sumit 6000.0 

Hvis lokale variabler (formelle argumenter) og instansvariabler er forskellige, er der ingen grund til at bruge dette nøgleord som i følgende program:

Program, hvor dette søgeord ikke er påkrævet

 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(); }} 
Test det nu

Produktion:

 111 ankit 5000.0 112 sumit 6000.0 

Det er bedre at bruge meningsfulde navne til variabler. Så vi bruger samme navn for eksempel variabler og parametre i realtid, og bruger altid dette nøgleord.


2) dette: at påberåbe sig den aktuelle klassemetode

Du kan påberåbe metoden for den aktuelle klasse ved at bruge dette nøgleord. Hvis du ikke bruger dette nøgleord, tilføjer compiler automatisk dette nøgleord, mens metoden påberåbes. Lad os se eksemplet

 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(); }} 
Test det nu

Produktion:

 hello n hello m 

3) this(): for at kalde den aktuelle klassekonstruktør

This()-konstruktørkaldet kan bruges til at starte den aktuelle klassekonstruktør. Det bruges til at genbruge konstruktøren. Med andre ord bruges det til konstruktørkæde.

Kalder standardkonstruktør fra parameteriseret konstruktør:

 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); }} 
Test det nu

Produktion:

 hello a 10 

Kalder parameteriseret konstruktør fra standard konstruktør:

 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(); }} 
Test det nu

Produktion:

 5 hello a 

Reel brug af dette() constructor-kald

This()-konstruktørkaldet skal bruges til at genbruge konstruktøren fra konstruktøren. Den vedligeholder kæden mellem konstruktørerne, dvs. den bruges til konstruktørkæde. Lad os se eksemplet nedenfor, der viser den faktiske brug af dette søgeord.

liste streng java
 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(); }} 
Test det nu

Produktion:

 111 ankit java 0.0 112 sumit java 6000.0 

Regel: Kald til this() skal være den første sætning 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(); }} 
Test det nu

Produktion:

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

4) dette: at passere som et argument i metoden

Dette nøgleord kan også sendes som et argument i metoden. Det bruges hovedsageligt i eventhåndteringen. Lad os se eksemplet:

 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(); } } 
Test det nu

Produktion:

 method is invoked 

Anvendelse af dette, der kan overføres som et argument:

I begivenhedshåndtering (eller) i en situation, hvor vi er nødt til at give reference af en klasse til en anden. Det bruges til at genbruge et objekt i mange metoder.


5) dette: at sende som argument i konstruktørkaldet

Vi kan også sende dette nøgleord i konstruktøren. Det er nyttigt, hvis vi skal bruge et objekt i flere klasser. Lad os se eksemplet:

Java abstrakt klasse
 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(); } } 
Test det nu
 Output:10 

6) dette nøgleord kan bruges til at returnere den aktuelle klasseinstans

Vi kan returnere dette søgeord som et udsagn fra metoden. I sådanne tilfælde skal metodens returtype være klassetypen (ikke-primitiv). Lad os se eksemplet:

Syntaks af dette, der kan returneres som en erklæring

 return_type method_name(){ return this; } 

Eksempel på dette søgeord, som du returnerer som et udsagn fra 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(); } } 
Test det nu

Produktion:

 Hello java 

Beviser dette nøgleord

Lad os bevise, at dette nøgleord refererer til den aktuelle klasseforekomstvariabel. I dette program udskriver vi referencevariablen, og outputtet af begge variabler er det samme.

 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(); } } 
Test det nu

Produktion:

 A5@22b3ea59 A5@22b3ea59