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(int no, 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");
	}

	public Ogrenci(int no, 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ılarak parametre 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 = new ArrayList<Ogrenci>();

		Ogrenci ogrenci1 = new Ogrenci(1, "Ali Bal");
		Ogrenci ogrenci2 = new Ogrenci(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..

Share

17 Replies to “Java’da this Anahtar Kelimesi ve Kullanımı”

  1. çok çok teşekkürler. Anlatımın ve örneklerin çok sade. Kolay olmasına rağmen insanların zorlandığı bir konu bu. Yazdıklarından çok iyi istifade ettim.

    Tekrar teşekkürler emeğine sağlık..

  2. Burak :teşekkürler

    ufuk :çok çok teşekkürler. Anlatımın ve örneklerin çok sade. Kolay olmasına rağmen insanların zorlandığı bir konu bu. Yazdıklarından çok iyi istifade ettim.
    Tekrar teşekkürler emeğine sağlık..

  3. kafamdaki soruların yanıtlarını bulmamı sağladığınız için çok teşekkür ederim seçkin bey..umarım aydınlatıcı yazılarınıza devam edersiniz..çok faydalı oluyor..

  4. this anahtar kelimesini print fonksiyonlarııyla kullanırken toString metodunu çağıracağını ekleyebiliriz 🙂

    örneğin System.out.println(this);

  5. Allah Razı olsun. İlmin sadakası olur inşaallah. Sade ve anlaşılır olmuş. Paylaşımların devamı recasıyla..

Bir Cevap Yazın