Postoji više načina upotrebe ključne riječi this. U Javi, ovo je referentna varijabla koja upućuje na tekući objekt. Upotreba ključne riječi this Ovdje je dato 6 upotreba ključne riječi this.
Napomena: Početnici u Javi ne bi trebalo da koriste više od dve od ovih upotreba ključne riječi this.
Ako postoji dvosmislenost između instansne varijable i parametra, ključna riječ this rješava problem dvosmislenosti. Problem koji se javlja bez ključne riječi this Sljedeći primjer objašnjava koji se problem javlja ako se ne koristi ključna riječ this:
class Student10{ int id; String name; Student10(int id,String name){ id = id; name = name; } void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student10 s1 = new Student10(111,"Petar"); Student10 s2 = new Student10(321,"Marko"); s1.display(); s2.display(); } } Ispis na ekranu: 0 null 0 null
U ovom primjeru, parametar (formalni argumenti) i instansne varijable su iste, zbog čega koristimo ključnu riječ this da razlikujemo lokalnu varijablu i instansnu varijablu. Rješenje problema pomoću ključne riječi this
// primjer za ključnu riječ this class Student11{ int id; String name; Student11(int id,String name){ this.id = id; this.name = name; } void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student11 s1 = new Student11(111,"Petar"); Student11 s2 = new Student11(222,"Marko"); s1.display(); s2.display(); } } Ispis na ekranu: 111 Petar 222 Marko
Ako su lokalne varijable (formalni argumenti) i instansne varijable različite, nema potrebe da se koristi ključna riječ this, kao u sljedećem programu: Program gdje ključna riječ this nije potrebna
class Student12{ int id; String name; Student12(int i,String n){ id = i; name = n; } void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student12 e1 = new Student12(111,"Petar"); Student12 e2 = new Student12(222,"Marko"); e1.display(); e2.display(); } } Ispis na ekranu: 111 Petar 222 Marko
this() poziv konstruktora može se koristiti da pozove konstruktor tekuće klase (ulančavanje konstruktora). Ovaj pristup je bolji ako u klasi ima mnogo konstruktora, a želi se ponovna upotreba tog konstruktora.
// Program za this() poziv konstruktora (ulančavanje konstruktora) class Student13{ int id; String name; Student13(){System.out.println("default konstruktor je pozvan");} Student13(int id,String name){ this (); // koristi se da pozove konstruktor tekuće klase this.id = id; this.name = name; } void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student13 e1 = new Student13(111,"Petar"); // pri dodjeli vrijednosti poziva konstruktor sa 2 parametra, te ispisuje default konstruktor je pozvan Student13 e2 = new Student13(222,"Marko"); // pri dodjeli vrijednosti poziva konstruktor sa 2 parametra, te ispisuje default konstruktor je pozvan e1.display(); e2.display(); } } Ispis na ekranu: default konstruktor je pozvan default konstruktor je pozvan 111 Petar 222 Marko
Gdje se koristi this() poziv konstruktora? this() poziv konstruktora treba koristiti za ponovnu upotrebu (reuse) konstruktora u konstruktoru. On održava vezu između konstruktora tj. koristi se za ulančavanje konstruktora. Pogledajmo primjer koji pokazuje stvarnu upotrebu ključne riječi this.
class Student14{ int id; String name; String city; Student14(int id,String name){ this.id = id; this.name = name; } Student14(int id,String name,String city){ this(id,name); // sada nema potrebe da se inicijalizuje id i name this.city=city; } void display(){System.out.println(id+" "+name+" "+city);} public static void main(String args[]){ Student14 e1 = new Student14(111,"Petar"); Student14 e2 = new Student14(222,"Marko","Beograd"); e1.display(); e2.display(); } } Ispis na ekranu: 111 Petar null 222 Marko Beograd
Pravilo: Poziv this() mora biti prva naredba u konstruktoru.
class Student15{ int id; String name; Student15(){System.out.println("default konstruktor je pozvan");} Student15(int id,String name){ id = id; name = name; this (); // mora biti prva naredba } void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student15 e1 = new Student15(111,"Petar"); Student15 e2 = new Student15(222,"Marko"); e1.display(); e2.display(); } } Ispis na ekranu: Compile Time Error
Moguće je pozvati metod tekuće klase pomoću ključne riječi this. Ako se ne upotrijebi ključna riječ this, kompajler će automatski dodati ključnu riječ this dok poziva metod. Pogledajmo primjer:
class S{ void m(){ System.out.println("metod je pozvan"); } void n(){ this.m(); // nije potrebno zato što kompajler to uradi sam. } void p(){ n(); // kompajler će dodati this da pozove n() metod kao this.n() } public static void main(String args[]){ S s1 = new S(); s1.p(); } } Ispis na ekranu: method je pozvan
Ključna riječ this može takođe biti proslijeđena kao argument u metodi. Ovo se uglavnom koristi u rukovanju događajima. Pogledajmo primjer:
class S2{ void m(S2 obj){ System.out.println("metod je pozvan"); } void p(){ m(this); } public static void main(String args[]){ S2 s1 = new S2(); s1.p(); } } Ispis na ekranu: metod je pozvan
Kada this ne može biti proslijeđen kao argument? U rukovanju događajima ili u situaciji gdje moramo obezbijediti referencu klase drugoj klasi.
Ključna riječ this se takođe može proslijediti u konstruktoru. Korisno je ako možemo upotrijebiti jedan objekt u više klasa. Pogledajmo primjer:
class B{ A4 obj; B(A4 obj){ this.obj=obj; } void display(){ System.out.println(obj.data); // upotreba podatka-člana klase A4 } } class A4{ int data=10; A4(){ B b=new B(this); b.display(); } public static void main(String args[]){ A4 a=new A4(); } } Ispis na ekranu: 10
Ključnu riječ this možemo vratiti kao naredbu iz metode. U tom slučaju, vraćeni (return) tip metode mora biti tip klase (ne-primitivan). Pogledajmo primjer: Sintaksa za this koji može biti vraćen kao naredba
return_type method_name(){ return this; }
Primjer ključne riječi this koja se vraća kao naredba 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(); } } Ispis na ekranu: Hello java
Dokažimo da ključna riječ this upućuje na instansnu varijablu tekuće klase. U ovom programu, ispisujemo referentnu varijablu i this, izlaz obe varijable je isti.
class A5{ void m(){ System.out.println(this); // ispisuje ID iste reference } public static void main(String args[]){ A5 obj=new A5(); System.out.println(obj); // ispisuje ID reference obj.m(); } } Ispis na ekranu: A5@22b3ea59 A5@22b3ea59
Zadaci iz ovog poglavlja Objektno orijentisano programiranje u Javi Index
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |