Využití může být hodně Java toto klíčové slovo . V Javě je to a referenční proměnná který odkazuje na aktuální objekt.
Toto klíčové slovo používá Java
Zde je uvedeno 6 použití tohoto klíčového slova Java.
- to lze použít k odkazování na aktuální proměnnou instance třídy.
- toto lze použít k vyvolání aktuální metody třídy (implicitně)
- this() lze použít k vyvolání konstruktoru aktuální třídy.
- to lze předat jako argument při volání metody.
- to lze předat jako argument ve volání konstruktoru.
- to lze použít k vrácení aktuální instance třídy z metody.
Návrh: Pokud jste začátečník v Javě, vyhledejte pouze tři použití tohoto klíčového slova.
1) toto: odkazovat na aktuální proměnnou instance třídy
Klíčové slovo this lze použít k odkazování na aktuální proměnnou instance třídy. Pokud existuje nejednoznačnost mezi proměnnými instance a parametry, toto klíčové slovo řeší problém nejednoznačnosti.
Pochopení problému bez tohoto klíčového slova
Pokud toto klíčové slovo nepoužijeme, pochopíme problém podle níže uvedeného příkladu:
výměna paměti
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(); }}Otestujte to hned
Výstup:
0 null 0.0 0 null 0.0
Ve výše uvedeném příkladu jsou parametry (formální argumenty) a proměnné instance stejné. Toto klíčové slovo tedy používáme k rozlišení lokální proměnné a proměnné instance.
Řešení výše uvedeného problému pomocí tohoto klíč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(); }}Otestujte to hned
Výstup:
111 ankit 5000.0 112 sumit 6000.0
Pokud se lokální proměnné (formální argumenty) a proměnné instance liší, není nutné používat toto klíčové slovo jako v následujícím programu:
Program, kde toto klíčové slovo není vyžadováno
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(); }}Otestujte to hned
Výstup:
111 ankit 5000.0 112 sumit 6000.0
Je lepší používat pro proměnné smysluplné názvy. Používáme tedy stejný název například pro proměnné a parametry v reálném čase a vždy používáme toto klíčové slovo.
2) toto: k vyvolání metody aktuální třídy
Metodu aktuální třídy můžete vyvolat pomocí klíčového slova this. Pokud nepoužijete klíčové slovo this, kompilátor toto klíčové slovo automaticky přidá při vyvolání metody. Podívejme se na příklad
semena vs spory
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(); }}Otestujte to hned
Výstup:
hello n hello m
3) this() : pro vyvolání konstruktoru aktuální třídy
Volání konstruktoru this() lze použít k vyvolání konstruktoru aktuální třídy. Používá se k opětovnému použití konstruktoru. Jinými slovy, používá se pro řetězení konstruktorů.
Volání výchozího konstruktoru z parametrizovaného konstruktoru:
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); }}Otestujte to hned
Výstup:
hello a 10
Volání parametrizovaného konstruktoru z výchozího konstruktoru:
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(); }}Otestujte to hned
Výstup:
5 hello a
Skutečné použití volání konstruktoru this().
Volání konstruktoru this() by se mělo použít k opětovnému použití konstruktoru z konstruktoru. Udržuje řetěz mezi konstruktory, tj. používá se pro řetězení konstruktorů. Podívejme se na příklad uvedený níže, který ukazuje skutečné použití tohoto klíč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(); }}Otestujte to hned
Výstup:
111 ankit java 0.0 112 sumit java 6000.0
Pravidlo: Volání this() musí být prvním příkazem v konstruktoru.
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(); }}Otestujte to hned
Výstup:
jak převést z řetězce na int
Compile Time Error: Call to this must be first statement in constructor
4) toto: předat jako argument v metodě
Klíčové slovo this lze také předat jako argument v metodě. Používá se především při zpracování událostí. Podívejme se na pří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(); } }Otestujte to hned
Výstup:
method is invoked
Aplikace toho, co lze předat jako argument:
Při zpracování událostí (nebo) v situaci, kdy musíme poskytnout odkaz na třídu na jinou. Používá se k opětovnému použití jednoho objektu v mnoha metodách.
5) toto: předat jako argument ve volání konstruktoru
Klíčové slovo this můžeme předat také v konstruktoru. Je to užitečné, pokud musíme použít jeden objekt ve více třídách. Podívejme se na příklad:
xml komentář
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(); } }Otestujte to hned
Output:10
6) toto klíčové slovo lze použít k vrácení aktuální instance třídy
Toto klíčové slovo můžeme vrátit jako příkaz z metody. V takovém případě musí být návratovým typem metody typ třídy (neprimitivní). Podívejme se na příklad:
Syntaxe tohoto, kterou lze vrátit jako příkaz
return_type method_name(){ return this; }
Příklad tohoto klíčového slova, které vrátíte jako příkaz z metody
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(); } }Otestujte to hned
Výstup:
Hello java
Prokázání tohoto klíčového slova
Dokažme, že toto klíčové slovo odkazuje na aktuální proměnnou instance třídy. V tomto programu tiskneme referenční proměnnou a to, výstup obou proměnných je stejný.
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(); } }Otestujte to hned
Výstup:
A5@22b3ea59 A5@22b3ea59