logo

aquesta paraula clau en Java

Hi pot haver molt d'ús Java aquesta paraula clau . A Java, això és a variable de referència que fa referència a l'objecte actual.

java aquesta paraula clau

Ús de Java aquesta paraula clau

Aquí es mostra l'ús de java aquesta paraula clau.

  1. això es pot utilitzar per referir la variable d'instància de classe actual.
  2. això es pot utilitzar per invocar el mètode de classe actual (implícitament)
  3. this() es pot utilitzar per invocar el constructor de classe actual.
  4. això es pot passar com a argument a la crida del mètode.
  5. això es pot passar com a argument a la crida del constructor.
  6. això es pot utilitzar per retornar la instància de classe actual del mètode.

Suggeriment: Si sou principiant a Java, cerqueu només tres usos d'aquesta paraula clau.

Ús de Java aquesta paraula clau

1) això: per referir la variable d'instància de classe actual

La paraula clau this es pot utilitzar per referir la variable d'instància de classe actual. Si hi ha ambigüitat entre les variables d'instància i els paràmetres, aquesta paraula clau resol el problema de l'ambigüitat.

Comprendre el problema sense aquesta paraula clau

Entendrem el problema si no fem servir aquesta paraula clau amb l'exemple que es mostra a continuació:

llista java buida
 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(); }} 
Prova-ho ara

Sortida:

 0 null 0.0 0 null 0.0 

A l'exemple anterior, els paràmetres (arguments formals) i les variables d'instància són els mateixos. Per tant, estem utilitzant aquesta paraula clau per distingir la variable local i la variable d'instància.

Solució del problema anterior amb aquesta paraula clau

 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(); }} 
Prova-ho ara

Sortida:

 111 ankit 5000.0 112 sumit 6000.0 

Si les variables locals (arguments formals) i les variables d'instància són diferents, no cal utilitzar aquesta paraula clau com en el programa següent:

Programa on aquesta paraula clau no és necessària

 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(); }} 
Prova-ho ara

Sortida:

 111 ankit 5000.0 112 sumit 6000.0 

És millor utilitzar noms significatius per a variables. Per tant, utilitzem el mateix nom, per exemple, variables i paràmetres en temps real, i sempre fem servir aquesta paraula clau.


2) això: per invocar el mètode de classe actual

Podeu invocar el mètode de la classe actual utilitzant la paraula clau this. Si no feu servir la paraula clau this, el compilador afegeix automàticament aquesta paraula clau mentre invoca el mètode. Vegem l'exemple

objecte java a json
 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(); }} 
Prova-ho ara

Sortida:

 hello n hello m 

3) this() : per invocar el constructor de classe actual

La crida al constructor this() es pot utilitzar per invocar el constructor de classe actual. S'utilitza per reutilitzar el constructor. En altres paraules, s'utilitza per a l'encadenament de constructors.

Cridant al constructor predeterminat des del constructor parametritzat:

 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); }} 
Prova-ho ara

Sortida:

 hello a 10 

Cridant al constructor parametritzat des del constructor predeterminat:

 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(); }} 
Prova-ho ara

Sortida:

 5 hello a 

Ús real d'aquesta crida al constructor ().

La crida al constructor this() s'ha d'utilitzar per reutilitzar el constructor del constructor. Manté la cadena entre els constructors, és a dir, s'utilitza per a l'encadenament de constructors. Vegem l'exemple que es mostra a continuació que mostra l'ús real d'aquesta paraula clau.

 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(); }} 
Prova-ho ara

Sortida:

 111 ankit java 0.0 112 sumit java 6000.0 

Regla: la crida a this() ha de ser la primera instrucció del 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(); }} 
Prova-ho ara

Sortida:

el somriure més bonic
 Compile Time Error: Call to this must be first statement in constructor 

4) això: passar com a argument en el mètode

La paraula clau this també es pot passar com a argument al mètode. S'utilitza principalment en la gestió d'esdeveniments. Vegem l'exemple:

 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(); } } 
Prova-ho ara

Sortida:

 method is invoked 

Aplicació d'això que es pot passar com a argument:

En el maneig d'esdeveniments (o) en una situació en què hem de proporcionar referència d'una classe a una altra. S'utilitza per reutilitzar un objecte en molts mètodes.


5) això: passar com a argument a la crida del constructor

També podem passar la paraula clau this al constructor. És útil si hem d'utilitzar un objecte en diverses classes. Vegem l'exemple:

cua de prioritats c++
 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(); } } 
Prova-ho ara
 Output:10 

6) aquesta paraula clau es pot utilitzar per retornar la instància de classe actual

Podem retornar aquesta paraula clau com una instrucció del mètode. En aquest cas, el tipus de retorn del mètode ha de ser el tipus de classe (no primitiu). Vegem l'exemple:

Sintaxi d'això que es pot retornar com a instrucció

 return_type method_name(){ return this; } 

Exemple d'aquesta paraula clau que torneu com a instrucció del mètode

 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(); } } 
Prova-ho ara

Sortida:

 Hello java 

Demostrant aquesta paraula clau

Provem que aquesta paraula clau fa referència a la variable d'instància de classe actual. En aquest programa, estem imprimint la variable de referència i aquesta, la sortida d'ambdues variables és la mateixa.

 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(); } } 
Prova-ho ara

Sortida:

 A5@22b3ea59 A5@22b3ea59