getClass() yöntemi, Class nesnesi ve Reflection - 1'e giriş

"Merhaba, Amigo!"

"Şimdi ana olaya geçelim. Class sınıfını tanıyacağız ve Reflection'a değineceğiz.
Muhtemelen zaten fark ettiğiniz gibi, Java'da her şey bir nesnedir. Peki bir nesnenin neye ihtiyacı vardır? Her nesnenin tanımlayan nedir? Bütün bunlar neyle ilgili?"

"Bir sınıf!"

"Doğru! Aferin. Her nesnenin bir sınıfı vardır. Ama nesnelere geri dönersek... Bazı nesneler tamamen bir varlık içerirken, diğerleri onu yönetmeye yardımcı olur."

"Bu ikinci tür, FileOutputStream ve Thread'i içerir. Bir Thread nesnesi oluşturduğunuzda , yeni bir thread oluşturulmaz. Thread, start() yöntemi çağrıldıktan sonra Java sanal makinesi tarafından oluşturulur. Bu nesne, basitçe işlemin yönetilmesine yardımcı olur."

" FileOutputStream ile aynı : dosya diskte depolanır ve işletim sistemi depolamayı ve erişimi yönetir. Ancak Java sanal makinesinin yardımıyla bir kez daha File nesneleri aracılığıyla onunla etkileşim kurabiliriz."

"Evet, bunu zaten anlıyorum."

"Yani, sınıflarla etkileşim için Class adında özel bir sınıf var."

"Bunu tahmin etmek zor değildi."

"Evet. Java sanal makinesi belleğe her yeni sınıf yüklediğinde, yüklenen sınıf hakkında belirli bilgileri almak için kullanabileceğiniz bir Class nesnesi oluşturur."

"Her sınıf ve nesne, bir « Sınıf nesnesi » ile ilişkilendirilir ."

Örnek Tanım
Class clazz = Integer.class;
Tamsayı sınıfının Class nesnesini alır.
Class clazz = int.class;
int sınıfının Class nesnesini alır.
Class clazz = "123".getClass();
Bir String nesnesinin Class nesnesini alır.
Class clazz = new Object().getClass();
Object nesnesinin Class nesnesini alır.

"Vay canına! Ne kadar ilginç!"

"Sınıf kelimesinin Java'da bir anahtar kelime olduğunu ve değişken adı olarak kullanılamayacağını hatırlıyor musunuz ?"

"Ah evet, biliyorum, biliyorum. Sadece unuttum."

"Sınıf nesnesini zaten bir yerlerde kullandınız mı?"

"Evet, eşittir yönteminin kendi uygulamamızı yazarken kullandık."

"Evet, nesnelerin aynı sınıfa sahip olup olmadığını test etmek için getClass() yöntemini kullanabilirsiniz."

"Peki bu nesneyle ne yapabilirsin?"

"Pek çok şey:"

java kodu Tanım
Class s = int.class;
String name = s.getName();
Sınıf adını alır.
Class s = Class.forName("java.lang.String");
İsme göre bir sınıf alır.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Nesnelerin sınıflarını karşılaştırır.

"İlginç ama düşündüğüm kadar havalı değil."

"Harika olmasını mı istiyorsun? Bir de Yansıma var .  Yansıma süper havalı."

" Yansıma nedir ?"

" Yansıma , bir sınıfın kendisi hakkında bilgi edinme yeteneğidir. Java'nın özel sınıfları vardır:  Field ve Method sınıflar için Class sınıfına benzer . Class nesneleri bir sınıf hakkında bilgi almanıza izin verdiği gibi , Field nesneleri de bir alan hakkında bilgi sağlar. ve Method nesnesi bir yöntem hakkında bilgi sağlar. Ve onlarla neler yapabileceğinize bir bakın:"

java kodu Tanım
Class[] interfaces = List.class.getInterfaces();
List sınıfının arabirimleri için Class nesnelerinin bir listesini alır
Class parent = String.class.getSuperclass();
String sınıfının üst sınıfının Class nesnesini alır
Method[] methods = List.class.getMethods();
List sınıfının yöntemlerinin bir listesini alır
String s = String.class.newInstance();
Yeni bir Dize oluşturur
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
String sınıfının uzunluk yöntemini alır ve onu String s üzerinde çağırır.

"Vay canına! İşte bu gerçekten harika!"