Java'da this Anahtar Kelimesi ve Kullanımı
Java dilinde kullanılan anahtar kelimelerden birisi de "this" kelimesidir. Kullanım alanı çok fazla olmasa da this anahtar kelimesinin ne işe yaradığını ve ne amaçlarla kullanıldığını öğrenmekte fayda var. Basit olarak söylemek gerekirse this anahtar kelimesi o anda hangi nesne üzerinde işlem yapılıyorsa o nesnenin referansını döndürür. Şimdi bu anahtar kelime ile neler yapılabileceğine bakalım.
this kelimesi isim çakışmaları olduğu durumlarda bir yerel değişkenin değil de, nesne değişkeninin kullanılacağını belirtmek için kullanılabilir. Aşağıdaki örneği inceleyelim.
public class Ogrenci { private int no; private String isim; public Ogrenci(intno, String isim) { this.no = no; this.isim = isim; } }
Yukarıdaki kodda Ogrenci sınıfının yapıcı metodu içerisinde no ve isim parametre değişkenleri bulunmaktadır.Ancak aynı zamanda nesneye ait aynı isimli no ve isim değişkenleri de bulunmaktadır.Bu durumda yapıcı metod içerisinde no veya isim değişkenine erişilmek istendiğinde nesne değişkenlerine değil, parametre değişkenlerine erişilecektir. Yapıcı metod içerisinden yukarıda tanımlanan nesne değişkenlerine erişilmek istenirse this anahtar kelimesi kullanılır.this kelimesi, o anda üzerinde işlem yapılan nesnenin referansını döndürür ve böylece nesne değişkenlerine erişmiş oluruz. Ancak aşağıdaki gibi nesne değişkenleri ile parametre değişkenlerinin isimleri farklı olsaydı this kelimesine gerek kalmayacaktı. Bu kural sadece yapıcı metotlar için değil, bütün metotlar için geçerlidir.
public class Ogrenci { private int no; private String isim; public Ogrenci(int a, String b) { no = a; isim = b; } }
this anahtar kelimesini kullanarak aynı sınıf içerisindeki diğer yapıcı metotları da çağırabiliriz.Aşağıdaki kodu inceleyelim.
public class Ogrenci { private int no; private String isim; public Ogrenci(int no) { this(no, "Seçkin Tozlu"); } publicOgrenci(intno, String isim) { this.no = no; this.isim = isim; } }
Bu sınıfta iki tane yapıcı metod bulunmaktadır. İki parametreli olanı zaten yukarıda incelemiştik.Tek parametreli olan yukarıdaki yapıcı metot içerisinde this anahtar kelimesi kullanılarak ikinci yapıcı metot çağırılmıştır. this ile nesne değişkenlerine erişirken normal referanslarda kullandığımız gibi nokta ile devam ediyoruz ancak başka bir yapıcı metot çağırıyorsak, normal metot çağırır gibi parantez kullanıyoruz.
this anahtar kelimesi daha önce de bahsettiğim gibi o anda işlem görmekte olan nesnenin referansını döndürdüğü için tek başına kullanılarakparametre geçilebilir veya bir metottan değer olarak geri döndürülebilir.
import java.util.List; public class Ogrenci { private int no; private String isim; public void ekle(List<Ogrenci> liste) { liste.add(this); } }
Yukarıdaki kodu incelersek, ekle metodunun içerisinde Ogrenci nesneleri tutan bir listeye ekleme yapılmaktadır.Ekleme yapılırken de parametre olarak "this" geçilmektedir.Yani bu ekle metodu hangi Ogrenci nesnesi üzerinden çağrılıyorsa, o Ogrenci nesnesi listeye eklenecektir.Daha iyi anlamak için aşağıdaki koda bakalım.
import java.util.ArrayList; import java.util.List; public class Client { public static void main(String[] args) { List<Ogrenci> ogrenciListesi = newArrayList<Ogrenci>(); Ogrenci ogrenci1 = newOgrenci(1, "Ali Bal"); Ogrenci ogrenci2 = newOgrenci(2, "Ayşe Yaman"); ogrenci1.ekle(ogrenciListesi); ogrenci2.ekle(ogrenciListesi); } }
Yukarıda önce bir Ogrenci listesi oluşturulmuş ve ardından iki tane öğrenci nesnesi yaratılmıştır. Daha sonra ogrenci1 ve ogrenci2 nesneleri üzerinden daha önce yazdığımız ekle metodu çağırılmıştır.Burada önemli olan nokta şudur: ogrenci1.ekle(ogrenciListesi); satırı çalışırken, ogrenci1 nesnesi üzerinden ekle metodu çağırıldığı için ekle metodu içerisindeki this anahtar kelimesi ogrenci1 nesnesini referans edecektir. Yani ekle metodu içerisinde ogrenci1 nesnesi listeye eklenecektir. Aynı şekilde ogrenci2.ekle(ogrenciListesi); satırı çalışırken de this kelimesi ogrenci2 nesnesini referans edecek ve dolayısıyla ogrenci2 nesnesi listeye eklenecektir.
this anahtar kelimesi yine benzer şekilde kullanılarak metotlardan değer olarak geri döndürülebilir.
public Ogrenci getOgrenci() { return this; }
Ogrenci sınıfı içerisinde yukarıdaki gibi bir metot olduğunu düşünürsek, getOgrenci metodu çağrıldığı zaman this referansı ile o nesneye ait bir referans döndürülmüş olur. Bu şekilde bir kullanım çok karşımıza çıkmaz ama yine de bilmekte fayda var.
Son olarak şunu da söyleyelim: this kelimesini static bir metot içerisinde kullanamayız.Static metotlar bir nesneye değil sınıfın kendisine ait olduğu için this anahtar kelimesi burada anlamsız kalır, çünkü referans edebileceği bir nesne yoktur.
this anahtar kelimesinin kullanım alanları bu şekilde. Bilmemiz gereken şey, this yazdığımız zaman, o anda işletilen nesneye ait bir referans elde etmiş oluruz. Daha sonra bu referans üzerinden nesne değişkenlerine erişebilir, parametre geçebilir veya başka işler yapabiliriz. Umarım faydalı bir yazı olmuştur. Herkese kolay gelsin..
Makale 18 Haz 2011 tarihinde Seçkin TOZLU tarafından seckintozlu.com web adresinde yayınlanmıştır, alıntıdır.