Det kan være mye bruk av Java dette nøkkelordet . I Java er dette en referansevariabel som refererer til det gjeldende objektet.
Bruk av Java dette nøkkelordet
Her er gitt 6 bruken av java dette søkeordet.
- dette kan brukes til å referere gjeldende klasseforekomstvariabel.
- dette kan brukes til å påkalle gjeldende klassemetode (implisitt)
- this() kan brukes til å starte gjeldende klassekonstruktør.
- dette kan sendes som et argument i metodekallet.
- dette kan sendes som argument i konstruktørkallet.
- dette kan brukes til å returnere gjeldende klasseforekomst fra metoden.
Forslag: Hvis du er nybegynner til java, søk bare tre bruksområder for dette søkeordet.
1) dette: å referere gjeldende klasseforekomstvariabel
Dette nøkkelordet kan brukes til å referere til gjeldende klasseforekomstvariabel. Hvis det er tvetydighet mellom forekomstvariablene og parameterne, løser dette nøkkelordet problemet med tvetydighet.
Forstå problemet uten dette nøkkelordet
La oss forstå problemet hvis vi ikke bruker dette søkeordet i eksemplet nedenfor:
kommando i node js
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 nå
Produksjon:
0 null 0.0 0 null 0.0
I eksemplet ovenfor er parametere (formelle argumenter) og instansvariabler de samme. Så vi bruker dette nøkkelordet for å skille mellom lokal variabel og instansvariabel.
Løsning av problemet ovenfor med dette nøkkelordet
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 nå
Produksjon:
diana mary blacker
111 ankit 5000.0 112 sumit 6000.0
Hvis lokale variabler (formelle argumenter) og instansvariabler er forskjellige, er det ikke nødvendig å bruke dette nøkkelordet som i følgende program:
Program der dette nøkkelordet ikke er nødvendig
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 nå
Produksjon:
111 ankit 5000.0 112 sumit 6000.0
Det er bedre å bruke meningsfulle navn for variabler. Så vi bruker samme navn for for eksempel variabler og parametere i sanntid, og bruker alltid dette nøkkelordet.
2) dette: å påkalle gjeldende klassemetode
Du kan påkalle metoden for gjeldende klasse ved å bruke dette nøkkelordet. Hvis du ikke bruker dette nøkkelordet, legger kompilatoren automatisk til dette nøkkelordet mens metoden påkalles. La oss 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 nå
Produksjon:
hello n hello m
3) this(): for å påkalle gjeldende klassekonstruktør
This()-konstruktørkallet kan brukes til å starte den gjeldende klassekonstruktøren. Den brukes til å gjenbruke konstruktøren. Med andre ord, den brukes til konstruktørkjeding.
Kaller standardkonstruktør fra parameterisert 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 nå
Produksjon:
hello a 10
Kaller parameterisert 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 nå
Produksjon:
5 hello a
Reell bruk av dette() konstruktørkallet
This()-konstruktørkallet skal brukes til å gjenbruke konstruktøren fra konstruktøren. Den opprettholder kjeden mellom konstruktørene, dvs. den brukes til konstruktørkjeding. La oss se eksemplet nedenfor som viser den faktiske bruken av dette søkeordet.
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 nå
Produksjon:
111 ankit java 0.0 112 sumit java 6000.0
Regel: Call to this() må være den første setningen 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 nå
Produksjon:
Compile Time Error: Call to this must be first statement in constructor
4) dette: å passere som et argument i metoden
Dette nøkkelordet kan også sendes som et argument i metoden. Den brukes hovedsakelig i arrangementshåndtering. La oss se eksempelet:
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 nå
Produksjon:
method is invoked
Anvendelse av dette som kan sendes som argument:
I hendelseshåndtering (eller) i en situasjon der vi må gi referanse til en klasse til en annen. Det brukes til å gjenbruke ett objekt i mange metoder.
5) dette: å sende som argument i konstruktørkallet
Vi kan også sende dette nøkkelordet i konstruktøren. Det er nyttig hvis vi må bruke ett objekt i flere klasser. La oss se eksempelet:
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 nå
Output:10
6) dette nøkkelordet kan brukes til å returnere gjeldende klasseforekomst
Vi kan returnere dette søkeordet som et utsagn fra metoden. I slike tilfeller må returtypen til metoden være klassetypen (ikke-primitiv). La oss se eksempelet:
Syntaks av dette som kan returneres som et utsagn
return_type method_name(){ return this; }
Eksempel på dette søkeordet som du returnerer som et utsagn 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 nå
Produksjon:
Hello java
Beviser dette nøkkelordet
La oss bevise at dette nøkkelordet refererer til den gjeldende klasseforekomstvariabelen. I dette programmet skriver vi ut referansevariabelen, og utdataene til begge variablene er de 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 nå
Produksjon:
A5@22b3ea59 A5@22b3ea59