Può esserci molto utilizzo di Java questa parola chiave . In Java, questo è a variabile di riferimento che si riferisce all'oggetto corrente.
Utilizzo di Java questa parola chiave
Di seguito vengono forniti i 6 utilizzi di Java per questa parola chiave.
- questo può essere usato per fare riferimento alla variabile dell'istanza della classe corrente.
- questo può essere usato per invocare il metodo della classe corrente (implicitamente)
- this() può essere utilizzato per richiamare il costruttore della classe corrente.
- questo può essere passato come argomento nella chiamata al metodo.
- questo può essere passato come argomento nella chiamata del costruttore.
- questo può essere usato per restituire l'istanza della classe corrente dal metodo.
Suggerimento: Se sei un principiante di Java, cerca solo tre usi di questa parola chiave.
1) this: per fare riferimento alla variabile dell'istanza della classe corrente
La parola chiave this può essere utilizzata per fare riferimento alla variabile dell'istanza della classe corrente. Se c'è ambiguità tra le variabili di istanza e i parametri, questa parola chiave risolve il problema dell'ambiguità.
Comprendere il problema senza questa parola chiave
Capiamo il problema se non utilizziamo questa parola chiave con l'esempio riportato di seguito:
come convertire una stringa in intero
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(); }}Provalo adesso
Produzione:
0 null 0.0 0 null 0.0
Nell'esempio precedente, i parametri (argomenti formali) e le variabili di istanza sono gli stessi. Quindi, stiamo usando questa parola chiave per distinguere la variabile locale e la variabile di istanza.
Soluzione del problema precedente con questa parola chiave
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(); }}Provalo adesso
Produzione:
111 ankit 5000.0 112 sumit 6000.0
Se le variabili locali (argomenti formali) e le variabili di istanza sono diverse, non è necessario utilizzare questa parola chiave come nel seguente programma:
Programma in cui questa parola chiave non è richiesta
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(); }}Provalo adesso
Produzione:
111 ankit 5000.0 112 sumit 6000.0
È un approccio migliore utilizzare nomi significativi per le variabili. Quindi utilizziamo lo stesso nome per le variabili e i parametri dell'istanza in tempo reale e utilizziamo sempre questa parola chiave.
2) questo: per invocare il metodo della classe corrente
Puoi richiamare il metodo della classe corrente utilizzando la parola chiave this. Se non usi la parola chiave this, il compilatore aggiunge automaticamente questa parola chiave mentre invochi il metodo. Vediamo l'esempio
è in Python
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(); }}Provalo adesso
Produzione:
hello n hello m
3) this(): per invocare il costruttore della classe corrente
La chiamata al costruttore this() può essere utilizzata per invocare il costruttore della classe corrente. Viene utilizzato per riutilizzare il costruttore. In altre parole, viene utilizzato per il concatenamento dei costruttori.
Chiamata del costruttore predefinito dal costruttore con parametri:
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); }}Provalo adesso
Produzione:
hello a 10
Chiamata del costruttore con parametri dal costruttore predefinito:
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(); }}Provalo adesso
Produzione:
5 hello a
Utilizzo reale della chiamata del costruttore this()
La chiamata al costruttore this() dovrebbe essere utilizzata per riutilizzare il costruttore dal costruttore. Mantiene la catena tra i costruttori, ovvero viene utilizzato per il concatenamento dei costruttori. Vediamo l'esempio fornito di seguito che mostra l'uso effettivo di questa parola chiave.
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(); }}Provalo adesso
Produzione:
111 ankit java 0.0 112 sumit java 6000.0
Regola: la chiamata a this() deve essere la prima istruzione nel costruttore.
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(); }}Provalo adesso
Produzione:
scanner Java successivo
Compile Time Error: Call to this must be first statement in constructor
4) questo: da passare come argomento nel metodo
La parola chiave this può anche essere passata come argomento nel metodo. Viene utilizzato principalmente nella gestione degli eventi. Vediamo l'esempio:
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(); } }Provalo adesso
Produzione:
method is invoked
Applicazione di ciò che può essere passato come argomento:
Nella gestione degli eventi (o) in una situazione in cui dobbiamo fornire il riferimento di una classe a un'altra. Viene utilizzato per riutilizzare un oggetto in molti metodi.
5) this: da passare come argomento nella chiamata del costruttore
Possiamo anche passare la parola chiave this nel costruttore. È utile se dobbiamo utilizzare un oggetto in più classi. Vediamo l'esempio:
deviazione standard numpy
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(); } }Provalo adesso
Output:10
6) questa parola chiave può essere utilizzata per restituire l'istanza della classe corrente
Possiamo restituire questa parola chiave come un'istruzione dal metodo. In tal caso, il tipo restituito del metodo deve essere il tipo di classe (non primitivo). Vediamo l'esempio:
Sintassi di this che può essere restituita come istruzione
return_type method_name(){ return this; }
Esempio di questa parola chiave restituita come istruzione dal metodo
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(); } }Provalo adesso
Produzione:
Hello java
Dimostrare questa parola chiave
Dimostriamo che questa parola chiave si riferisce alla variabile di istanza della classe corrente. In questo programma, stiamo stampando la variabile di riferimento e questo, l'output di entrambe le variabili è lo stesso.
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(); } }Provalo adesso
Produzione:
A5@22b3ea59 A5@22b3ea59