logo

dette nøkkelordet i Java

Det kan være mye bruk av Java dette nøkkelordet . I Java er dette en referansevariabel som refererer til det gjeldende objektet.

java dette søkeordet

Bruk av Java dette nøkkelordet

Her er gitt 6 bruken av java dette søkeordet.

  1. dette kan brukes til å referere gjeldende klasseforekomstvariabel.
  2. dette kan brukes til å påkalle gjeldende klassemetode (implisitt)
  3. this() kan brukes til å starte gjeldende klassekonstruktør.
  4. dette kan sendes som et argument i metodekallet.
  5. dette kan sendes som argument i konstruktørkallet.
  6. 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.

Bruk av Java dette nøkkelordet

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