Konu Hakkında:
Java'da, diğer nesne yönelimli dillerde olduğu gibi, mevcut nesneye işaret eden bir mekanizma uygulanır. Java'da bunun için this anahtar kelimesi kullanılır ve mevcut örneğe açık bir şekilde atıfta bulunmayı sağlar.
Problem:
this kullanılmadığında, yerel bir değişken (örneğin, yapılandırıcı veya yöntem parametresi) örnek alanını gölgeler. Ayrıca mevcut nesneyi başka bir bileşene aktarmak veya kendi sınıfının içinde yöntemlerini çağırmak gerektiğinde de this kullanımı gereklidir.
Çözüm:
this anahtar kelimesi:
Örnek:
public class Person { private String name; public Person(String name) { this.name = name; // Alanlar ile parametreler arasındaki çelişkiyi çözme } }
Ana özellikler:
Nesne dışı (statik) yöntemler ve alanlara this olmadan erişim mümkün mü?
Evet. Sınıfın yöntemleri içinde this kullanmak zorunlu değildir: derleyici varsayılan olarak mevcut nesnenin nesne dışı (statik olmayan) üyelerine erişir. this kullanımı, bir çelişki olduğunda zorunlu hale gelir (örneğin, yapılandırıcı parametreleri alanları gölgeler).
this, statik bir yöntem ya da statik blok içerisinde kullanılabilir mi?
Hayır. Statik bir bağlamda this değişkeni mevcut değildir, çünkü statik öğeler belirli bir örnekten bağımsızdır.
this(...) (aşırı yüklenmiş yapılandırıcı) çağrısı, yapılandırıcının ilk satırı olmayabilir mi?
Hayır. this aracılığıyla başka bir yapılandırıcının çağrılması, yapılandırıcının ilk satırı olmalıdır, aksi takdirde derleme hatası meydana gelir.
this kullanımı — okunabilirliği azaltırthis kullanımının sonucu — hata verirthisın yokluğu (hata riskini artırır)Geliştirici this kullanmadan bir yapılandırıcı yazıyor ve nesne alanları doğru bir şekilde başlatılmıyor:
public class A { private int a; public A(int a) { a = a; } // Hata! }
Artılar:
Eksiler:
Yapılandırıcı açıkça this kullanarak isim çelişkisini çözüyor ve alanı başlatıyor:
public class A { private int a; public A(int a) { this.a = a; } }
Artılar:
Eksiler:
this gerektiği her zaman açık olmayabilir, özellikle isim çelişkisi yoksa