Der kan være meget brug af Java dette søgeord . I Java er dette en referencevariabel der henviser til det aktuelle objekt.
Brug af Java dette søgeord
Her er givet de 6 brug af java dette søgeord.
- dette kan bruges til at henvise til den aktuelle klasseforekomstvariabel.
- dette kan bruges til at påberåbe den nuværende klassemetode (implicit)
- this() kan bruges til at kalde den aktuelle klassekonstruktør.
- dette kan sendes som et argument i metodekaldet.
- dette kan sendes som argument i konstruktørkaldet.
- 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.
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