Home > Java > Java’da this Anahtar Kelimesi ve Kullanımı

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

Categories: Java Tags: , ,
  1. ufuk
    Mart 26th, 2012 at 17:36 | #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
    Eylül 22nd, 2012 at 12:35 | #2

    teşekkürler

  3. erkan
    Kasım 18th, 2012 at 20:04 | #3

    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. Kasım 24th, 2012 at 22:41 | #4

    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
    Nisan 12th, 2013 at 21:48 | #5

    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
    Mayıs 7th, 2013 at 01:48 | #6

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

  7. murat
    Haziran 26th, 2013 at 16:24 | #7

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

  8. mehmet
    Temmuz 3rd, 2013 at 17:54 | #8

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

  9. Murat
    Aralık 6th, 2013 at 16:51 | #9

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

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

  10. Şubat 10th, 2014 at 19:28 | #10

    çok yararlı bir site herkes e tavsiye ederim

  11. orhan
    Kasım 4th, 2014 at 09:39 | #11

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

  12. Nisan 29th, 2015 at 22:00 | #12

    teşekürler hocam

  13. güven
    Temmuz 2nd, 2015 at 16:39 | #13

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

  14. eyaz
    Ağustos 12th, 2015 at 12:29 | #14

    Emegin icin tesekur

  15. Kasım 7th, 2016 at 09:30 | #15

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

  1. Ekim 20th, 2012 at 12:29 | #1
  2. Ekim 23rd, 2013 at 22:45 | #2

Please leave these two fields as-is:

Protected by Invisible Defender. Showed 403 to 653.790 bad guys.

%d blogcu bunu beğendi: