Sınıfların karmaşık veri türleri olduğu gerçeğinden daha önce bahsetmiştik. Şimdi biraz sınıfların diğer tarafından, sınıfların Java makinesi tarafından nasıl işlendiği hakkında konuşalım. Java'da her şeyin bir nesne, hatta bir sınıf olduğunu unutmayın. Bir sınıf bir nesnedir. Bu seni şaşırttı mı? O zaman devam edelim.

Bir sınıfın belleğe yüklenmesi

Aslında, bir sınıf belleğe yüklendiğinde, üç özel "nesne" yaratılır:

Bir sınıfın belleğe yüklenmesi

Resmin kısa açıklaması:

Sarı dikdörtgen:

Kod dosyası diskte ".class" uzantılı bir dosya olarak saklanır. Sınıf, alanları ve yöntemleri ile bayt kodunda derlenen yöntemlerin kaynak kodu hakkında bilgiler içerir.

Turuncu dikdörtgen:

Java makinesi bir sınıfı belleğe yüklediğinde, bayt kodunu bilgisayarın işlemcisine ve işletim sistemine özgü makine koduna derler. Bu makine koduna yalnızca Java makinesinin erişimi vardır. Java programcıları olarak ona erişimimiz yok.

Yeşil dikdörtgen:

Java makinesi, sınıfın tüm statik değişkenlerini ve yöntemlerini içeren bir nesne oluşturur. Sınıf adını kullanarak bu "nesneye" erişirsiniz.

Örneğin, yazdığınızda , sınıfta bulunan statik değişkene atıfta bulunuyorsunuz . Bu nesne bizim yeşil dikdörtgenimiz. Statik değişkenin depolandığı yer burasıdır .java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI

Mavi dikdörtgen:

Java makinesi bir sınıfın kodunu belleğe yüklediğinde, java.lang.Classyüklenen sınıfla ilgili bilgileri depolayan özel bir nesne oluşturur: adı, yöntem adları, alan adları ve türleri vb.

"Sınıf" adı biraz kafa karıştırıcı olabilir. Bu sınıf sadece yüklenen sınıf hakkında bazı bilgileri sakladığından, ClassInfo olarak adlandırmak daha mantıklı olacaktır.

Herhangi bir tür için Class nesnesini aşağıdaki gibi bir komut kullanarak elde edebilirsiniz:

Class name = ClassName.class;

Örnekler:

kod Not
Class a = String.class;
Sınıf Classhakkında bilgi içeren bir nesne alınString
Class b = Object.class;
Sınıf Classhakkında bilgi içeren bir nesne alınObject
Class c = Integer.class;
Sınıf Classhakkında bilgi içeren bir nesne alınInteger
Class d = int.class;
türü Classhakkında bilgi içeren bir nesne alınint
Class e = void.class;
türü Classhakkında bilgi içeren bir nesne alınvoid

getClass()Ayrıca, her nesnenin sınıftan miras aldığı bir yöntemi olduğundan, herhangi bir nesneden bir sınıf tanımlama nesnesine referans alabilirsiniz Object.

Örnekler:

kod Not
Class a = "Hello".getClass();
ile aynı nesneString.class
Class b = new Integer().getClass();
ile aynı nesneInteger.class
Class c = Boolean.TRUE.getClass();
ile aynı nesneBoolean.class