İçeriği atlamak için "Enter"'a basın

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 Comments

  1. ufuk
    ufuk Mart 26, 2012

    ç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
    Burak Eylül 22, 2012

    teşekkürler

  3. erkan
    erkan Kasım 18, 2012

    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..

  4. İbrahim Gündüz
    İbrahim Gündüz Kasım 24, 2012

    Klavyenize bilginize sağlık. this olayı nesne mantığının ne kadar güçlü olabiliceğinin göstergesi…

    this’i de sayeniz de daha iyi anladım, teşekkürler.

  5. yılmaz
    yılmaz Nisan 12, 2013

    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..

  6. Mustafa
    Mustafa Mayıs 7, 2013

    Gerçekten this kelimeciğine güzel anlatan bir yazı, teşekkürler.

  7. murat
    murat Haziran 26, 2013

    yazılarınız gerçekten çok yardımcı oluyor , teşekkürler

  8. mehmet
    mehmet Temmuz 3, 2013

    Çok yararli bir paylaşım teşekkürler.

  9. Murat
    Murat Aralık 6, 2013

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

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

  10. MUSTAFA
    MUSTAFA Şubat 10, 2014

    çok yararlı bir site herkes e tavsiye ederim

  11. orhan
    orhan Kasım 4, 2014

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

  12. güven
    güven Temmuz 2, 2015

    Tesekkürler hocam, cok sade örneklerle dolu dolu bir anlatim olmus

  13. eyaz
    eyaz Ağustos 12, 2015

    Emegin icin tesekur

  14. Roman
    Roman Kasım 7, 2016

    Çok iyi anlatmışsınız Hocam. Tesekkürler!..

Bir Cevap Yazın

%d blogcu bunu beğendi: