Može se mnogo koristiti Java ovu ključnu riječ . U Javi je ovo a referentna varijabla koji se odnosi na trenutni objekt.
Upotreba ove ključne riječi u Javi
Ovdje se daje 6 upotreba jave ove ključne riječi.
- ovo se može koristiti za upućivanje na varijablu instance trenutne klase.
- ovo se može koristiti za pozivanje metode trenutne klase (implicitno)
- this() se može koristiti za pozivanje trenutnog konstruktora klase.
- ovo se može proslijediti kao argument u pozivu metode.
- ovo se može proslijediti kao argument u pozivu konstruktora.
- ovo se može koristiti za vraćanje trenutne instance klase iz metode.
Prijedlog: Ako ste početnik u Javi, potražite samo tri upotrebe ove ključne riječi.
1) ovo: uputiti na varijablu instance trenutne klase
Ova ključna riječ može se koristiti za upućivanje na varijablu instance trenutne klase. Ako postoji dvosmislenost između varijabli instance i parametara, ova ključna riječ rješava problem dvosmislenosti.
Razumijevanje problema bez ove ključne riječi
Shvatimo problem ako ne koristimo ovu ključnu riječ pomoću donjeg primjera:
pretvoriti booleov u niz
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(); }}Testirajte sada
Izlaz:
0 null 0.0 0 null 0.0
U gornjem primjeru, parametri (formalni argumenti) i varijable instance su isti. Dakle, koristimo ovu ključnu riječ za razlikovanje lokalne varijable i varijable instance.
Rješenje gornjeg problema ovom ključnom riječi
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(); }}Testirajte sada
Izlaz:
111 ankit 5000.0 112 sumit 6000.0
Ako su lokalne varijable (formalni argumenti) i varijable instance različite, nema potrebe koristiti ovu ključnu riječ kao u sljedećem programu:
Program u kojem ova ključna riječ nije potrebna
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(); }}Testirajte sada
Izlaz:
111 ankit 5000.0 112 sumit 6000.0
Bolji je pristup koristiti smislena imena za varijable. Stoga koristimo isto ime za varijable instance i parametre u stvarnom vremenu i uvijek koristimo ovu ključnu riječ.
2) ovo: za pozivanje metode trenutne klase
Možete pozvati metodu trenutne klase korištenjem ove ključne riječi. Ako ne koristite ovu ključnu riječ, prevodilac automatski dodaje ovu ključnu riječ dok poziva metodu. Pogledajmo primjer
podniz niz 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(); }}Testirajte sada
Izlaz:
hello n hello m
3) this() : za pozivanje trenutnog konstruktora klase
Poziv this() konstruktora može se koristiti za pozivanje trenutnog konstruktora klase. Koristi se za ponovno korištenje konstruktora. Drugim riječima, koristi se za ulančavanje konstruktora.
Pozivanje zadanog konstruktora iz parametriziranog konstruktora:
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); }}Testirajte sada
Izlaz:
hello a 10
Pozivanje parametriziranog konstruktora iz zadanog konstruktora:
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(); }}Testirajte sada
Izlaz:
5 hello a
Stvarna upotreba poziva konstruktora this().
Poziv konstruktora this() trebao bi se koristiti za ponovno korištenje konstruktora iz konstruktora. Održava lanac između konstruktora tj. koristi se za ulančavanje konstruktora. Pogledajmo donji primjer koji prikazuje stvarnu upotrebu ove ključne riječi.
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(); }}Testirajte sada
Izlaz:
111 ankit java 0.0 112 sumit java 6000.0
Pravilo: Poziv this() mora biti prva izjava u 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(); }}Testirajte sada
Izlaz:
java zamijeni sve
Compile Time Error: Call to this must be first statement in constructor
4) ovo: proslijediti kao argument u metodi
Ova ključna riječ također se može proslijediti kao argument u metodi. Uglavnom se koristi u obradi događaja. Pogledajmo primjer:
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(); } }Testirajte sada
Izlaz:
method is invoked
Primjena ovoga koja se može proslijediti kao argument:
U rukovanju događajem (ili) u situaciji kada moramo dati referencu klase na drugu. Koristi se za ponovnu upotrebu jednog objekta u mnogim metodama.
5) ovo: proslijediti kao argument u pozivu konstruktora
Također možemo prenijeti ovu ključnu riječ u konstruktor. Korisno je ako moramo koristiti jedan objekt u više klasa. Pogledajmo primjer:
10 od 1 milijuna
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(); } }Testirajte sada
Output:10
6) ova se ključna riječ može koristiti za vraćanje trenutne instance klase
Ovu ključnu riječ možemo vratiti kao iskaz iz metode. U tom slučaju povratni tip metode mora biti tip klase (neprimitivan). Pogledajmo primjer:
Sintaksa ovoga koja se može vratiti kao izjava
return_type method_name(){ return this; }
Primjer ove ključne riječi koju vraćate kao iskaz iz metode
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(); } }Testirajte sada
Izlaz:
Hello java
Dokazivanje ove ključne riječi
Dokažimo da se ova ključna riječ odnosi na trenutnu varijablu instance klase. U ovom programu ispisujemo referentnu varijablu, a izlaz obje varijable je isti.
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(); } }Testirajte sada
Izlaz:
A5@22b3ea59 A5@22b3ea59