Môže byť veľa využitia Java toto kľúčové slovo . V Jave je to a referenčná premenná ktorý odkazuje na aktuálny objekt.
Toto kľúčové slovo používa Java
Tu je uvedené 6 použitia java tohto kľúčového slova.
- toto možno použiť na odkazovanie aktuálnej premennej inštancie triedy.
- toto možno použiť na vyvolanie aktuálnej metódy triedy (implicitne)
- this() možno použiť na vyvolanie konštruktora aktuálnej triedy.
- toto môže byť odovzdané ako argument vo volaní metódy.
- toto možno odovzdať ako argument vo volaní konštruktora.
- toto možno použiť na vrátenie aktuálnej inštancie triedy z metódy.
Návrh: Ak ste začiatočník v jazyku Java, vyhľadajte iba tri použitia tohto kľúčového slova.
1) toto: odkazovať na aktuálnu premennú inštancie triedy
Kľúčové slovo this možno použiť na odkazovanie na aktuálnu premennú inštancie triedy. Ak existuje nejednoznačnosť medzi premennými inštancie a parametrami, toto kľúčové slovo rieši problém nejednoznačnosti.
Pochopenie problému bez tohto kľúčového slova
Ak toto kľúčové slovo nepoužijeme, pochopme problém podľa príkladu uvedeného nižšie:
prime žiadny kód v jave
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(); }}Vyskúšajte to
Výkon:
0 null 0.0 0 null 0.0
Vo vyššie uvedenom príklade sú parametre (formálne argumenty) a premenné inštancie rovnaké. Toto kľúčové slovo teda používame na rozlíšenie lokálnej premennej a premennej inštancie.
Riešenie vyššie uvedeného problému pomocou tohto kľúčového slova
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(); }}Vyskúšajte to
Výkon:
111 ankit 5000.0 112 sumit 6000.0
Ak sa lokálne premenné (formálne argumenty) a premenné inštancie líšia, nie je potrebné použiť toto kľúčové slovo ako v nasledujúcom programe:
Program, kde sa toto kľúčové slovo nevyžaduje
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(); }}Vyskúšajte to
Výkon:
111 ankit 5000.0 112 sumit 6000.0
Je lepší prístup používať pre premenné zmysluplné názvy. Preto používame rovnaký názov pre napríklad premenné a parametre v reálnom čase a vždy používame toto kľúčové slovo.
2) toto: na vyvolanie metódy aktuálnej triedy
Metódu aktuálnej triedy môžete vyvolať pomocou kľúčového slova this. Ak nepoužijete kľúčové slovo this, kompilátor toto kľúčové slovo automaticky pridá pri vyvolaní metódy. Pozrime sa na príklad
pridať reťazec java
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(); }}Vyskúšajte to
Výkon:
hello n hello m
3) this(): na vyvolanie konštruktora aktuálnej triedy
Volanie konštruktora this() možno použiť na vyvolanie konštruktora aktuálnej triedy. Používa sa na opätovné použitie konštruktora. Inými slovami, používa sa na reťazenie konštruktorov.
Volanie predvoleného konštruktora z parametrizovaného konštruktora:
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); }}Vyskúšajte to
Výkon:
hello a 10
Volanie parametrizovaného konštruktora z predvoleného konštruktora:
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(); }}Vyskúšajte to
Výkon:
5 hello a
Skutočné použitie tohto () volania konštruktora
Volanie konštruktora this() by sa malo použiť na opätovné použitie konštruktora z konštruktora. Udržuje reťazec medzi konštruktormi, tj používa sa na reťazenie konštruktorov. Pozrime sa na príklad uvedený nižšie, ktorý zobrazuje skutočné použitie tohto kľúčového slova.
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(); }}Vyskúšajte to
Výkon:
111 ankit java 0.0 112 sumit java 6000.0
Pravidlo: Volanie this() musí byť prvým príkazom v konštruktore.
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(); }}Vyskúšajte to
Výkon:
je kat timpf právnička
Compile Time Error: Call to this must be first statement in constructor
4) toto: prejsť ako argument v metóde
Kľúčové slovo this môže byť tiež odovzdané ako argument v metóde. Používa sa hlavne pri manipulácii s udalosťami. Pozrime sa na príklad:
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(); } }Vyskúšajte to
Výkon:
method is invoked
Použitie tohto, ktoré možno odovzdať ako argument:
Pri manipulácii s udalosťami (alebo) v situácii, keď musíme poskytnúť referenciu triedy na inú. Používa sa na opätovné použitie jedného objektu v mnohých metódach.
5) toto: prejsť ako argument vo volaní konštruktora
Kľúčové slovo this môžeme odovzdať aj do konštruktora. Je to užitočné, ak musíme jeden objekt použiť vo viacerých triedach. Pozrime sa na príklad:
obsadenie v sql
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(); } }Vyskúšajte to
Output:10
6) toto kľúčové slovo možno použiť na vrátenie aktuálnej inštancie triedy
Toto kľúčové slovo môžeme vrátiť ako príkaz z metódy. V takom prípade musí byť návratový typ metódy typ triedy (neprimitívny). Pozrime sa na príklad:
Syntax tohto, ktorú možno vrátiť ako príkaz
return_type method_name(){ return this; }
Príklad tohto kľúčového slova, ktoré vrátite ako príkaz z metódy
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(); } }Vyskúšajte to
Výkon:
Hello java
Potvrdenie tohto kľúčového slova
Ukážme, že toto kľúčové slovo odkazuje na aktuálnu premennú inštancie triedy. V tomto programe tlačíme referenčnú premennú a to, výstup oboch premenných je rovnaký.
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(); } }Vyskúšajte to
Výkon:
A5@22b3ea59 A5@22b3ea59