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.
Ús de Java aquesta paraula clau
Aquí es mostra l'ús de java aquesta paraula clau.
- això es pot utilitzar per referir la variable d'instància de classe actual.
- això es pot utilitzar per invocar el mètode de classe actual (implícitament)
- this() es pot utilitzar per invocar el constructor de classe actual.
- això es pot passar com a argument a la crida del mètode.
- això es pot passar com a argument a la crida del constructor.
- 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.
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