Merhaba Amigo! Size değişkenlerin iç yapısından bahsetmek istiyorum. Bildiğiniz gibi, her değişken, değerinin saklandığı bir bellek alanıyla ilişkilendirilir. "

"Evet. Geçen sefer bana bundan bahsetmiştin."

"Harika. Hatırlaman güzel. O zaman devam edeceğim."

"Bütün bileşik tipler daha basit olanlardan oluşur. Ve onlar da daha basit olanlardan oluşur. Sonunda, daha fazla basitleştirilemeyen ilkel tiplerle sonuçlanırız. Onlara böyle denir - ilkel tipler . Çünkü örneğin, int ilkel bir türdür, ancak String , verilerini bir karakter tablosu olarak depolayan bileşik bir türdür (burada her karakter, char ilkel bir türdür ).

"Çok ilginç. Devam et."

"Bileşik tipler, basit olanların gruplanmasıyla oluşturulur. Bu tiplere sınıf diyoruz. Bir programda yeni bir sınıf tanımladığımızda, yeni bir bileşik veri tipi bildiriyoruz . Verileri ya diğer bileşik tipler ya da primitif tipler olacaktır."

java kodu Tanım
public class Person
{
   String name;
   int age;
}
Yeni bir bileşik tür bildirildi – Person.
Verileri String(bileşik tip) değişkeninde nameve int(ilkel tip) değişkeninde saklanır.age
public class Rectangle
{
   int x, y, width, height;
}
Yeni bir bileşik tür bildirildi – Rectangle. Dört (ilkel tip) değişkenden
oluşur .int
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Yeni bir bileşik tür bildirildi – Cat. Aşağıdaki değişkenlere sahiptir:
owner, bileşik tip Person
territory, bileşik tip Rectangle
age, ilkel tip int
name, bileşik tipString

"Şimdilik, her şey açık, ne kadar tuhaf görünse de."

"Büyük (bileşik) türler birçok küçük (ilkel) tür içerir. Bu nedenle bu türdeki nesneler çok fazla bellek kaplar - ilkel türlerin değişkenlerinden daha fazla. Bazen çok daha fazla. Eskiden bu tür değişkenlerle atama işlemleri yapmak uzun sürerdi. zaman ve belleğin büyük bölümlerinin kopyalanmasını gerektirdi.Bu nedenle, bileşik türdeki değişkenler nesnenin kendisini değil, sadece ona bir referansı, yani dört baytlık adresini saklar.Bu, bu tür nesnelerdeki verileri adreslemek için yeterlidir. Java makinesi, ilişkili tüm karmaşıklıkları yönetir."

"Bunlardan hiçbir şey anlamadım."

"Değişkenin bir kutuya benzediğini daha önce söylemiştik. 13 sayısını içinde saklamak istiyorsanız bir kağıda 13 yazıp kutunun içine koyabilirsiniz."

"Fakat kutuda (değişken) daha büyük bir şey saklamanız gerektiğini hayal edin. Örneğin, bir köpek, bir araba veya komşunuz. İtilemez olanı kutunun içine itmeye çalışmak yerine daha kolay bir şey yapabilirsiniz: bir fotoğraf kullanın gerçek köpek yerine köpeğin, gerçek araba yerine plakanın veya komşunuz yerine komşunuzun telefon numarasının."

"Bir kağıt alıp komşunun telefon numarasını yazıyoruz. Bu bir nesneye referans gibi. Komşunun telefon numarasının olduğu kağıdı kopyalayıp birkaç kutuya koyarsak, artık daha fazla referans var. komşunuza. Ama daha önce olduğu gibi, hala tek bir komşunuz var. Bu mantıklı, değil mi?"

"Verileri bu şekilde depolamanın önemli bir özelliği, tek bir nesneye birçok referansınız olabilmesidir. "

"Ne kadar ilginç! Neredeyse anladım. Bir kez daha söyleyin lütfen - aynı bileşik türden başka bir değişkene bileşik türde bir değişken atarsam ne olur?"

"O zaman iki değişken aynı adresi depolar. Bu , bir değişkenin başvurduğu nesnenin verilerini değiştirirseniz, diğerinin başvurduğu verileri değiştirdiğiniz anlamına gelir . Her iki değişken de aynı nesneye başvurur . Elbette, birçok olabilir. referansları da depolayan diğer değişkenler."

"Bileşik (referans/sınıf) türdeki değişkenler, bir nesneye referans tutmuyorlarsa ne yapar? Bu mümkün mü?"

"Evet, Amigo. Sorunda benden önde gidiyorsun. Bu mümkün. Referans (kompozit) tipindeki bir değişken, bir nesneye referans saklamıyorsa, o zaman "null" olarak bilinen değeri saklar. referans'. Temel olarak, bu, adresi 0 olan bir nesneye referansta bulunduğu anlamına gelir. Ancak, Java makinesi hiçbir zaman bu adrese sahip nesneler oluşturmaz, bu nedenle, bir referans değişkeni 0 içeriyorsa, o zaman herhangi bir nesneyi işaret etmediğini her zaman bilir. ."

java kodu Tanım
String s;
String s = null;
Eşdeğer ifadeler.
Person person;
person = new Person();
person = null;
Değeri null olan bir kişi değişkeni yaratıyoruz.
Ona yeni oluşturulan bir Person nesnesinin adresini atarız.
Değişkene null atarız.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Bir Cat nesnesi yaratıyoruz ve adresini cat değişkeninde saklıyoruz; cat.owner null'a eşittir.
cat.owner'ı yeni oluşturulan bir Person nesnesinin adresine eşitliyoruz.
cat.owner.name hala null değerine eşittir.
cat.owner.name değerini "God" olarak ayarladık

"Sizi doğru anladım mı? Değişkenler iki türe ayrılır: ilkel türler ve referans türleri. İlkel türler doğrudan değerleri depolarken, referans türleri bir nesneye yapılan başvuruyu saklar. İlkel türler arasında int, char, boolean ve diğerleri bulunur. Referans türler diğer her şeyi içerir. Onları oluşturmak için sınıfları kullanırız."

"Kesinlikle haklısın oğlum."

"Demek her şeyi anladığını söylüyorsun. İşte bilgini pekiştirmene yardımcı olacak bazı görevler."