Здравей, Амиго! Бих искал да ви разкажа за вътрешната структура на променливите. Както вече знаете, всяка променлива е свързана с област от паметта, където се съхранява нейната стойност. "

— Да. Ти ми каза за това последния път.

"Чудесно. Хубаво е, че си спомняте. Тогава ще продължа."

„Всички съставни типове се състоят от по-прости. А те на свой ред се състоят от още по-прости. Докато накрая стигнем до примитивни типове , които не могат да бъдат допълнително опростени. Така се наричат ​​– примитивни типове . например int е примитивен тип, но String е съставен тип, който съхранява своите данни като table със знаци (където всеки знак е примитивен тип char )."

— Много интересно. Продължавай.

„Съставните типове се формират чрез групиране на прости. Ние наричаме такива типове класове . Когато дефинираме нов клас в програма, ние декларираме нов съставен тип данни . Неговите данни ще бъдат or други съставни типове, or примитивни типове.“

Java code Описание
public class Person
{
   String name;
   int age;
}
Декларира се нов съставен тип – Person.
Неговите данни се съхраняват в Stringпроменлива (композитен тип) nameи intпроменлива (примитивен тип).age
public class Rectangle
{
   int x, y, width, height;
}
Декларира се нов съставен тип – Rectangle.
Състои се от четири int(примитивен тип) променливи.
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Декларира се нов съставен тип – Cat. Той има следните променливи:
owner, съставен тип Person
territory, съставен тип Rectangle
age, примитивен тип int
name, съставен типString

„Засега всичко е ясно, колкото и странно да изглежда.

"Големите (съставни) типове съдържат много малки (примитивни) типове. Ето защо обектите от тези типове заемат много памет - повече от променливите на примитивните типове. Понякога много повече. Извършването на операции за присвояване с такива променливи отнема много време време и изискваше копиране на големи участъци от паметта.Ето защо променливите от съставни типове не съхраняват самия обект, а по-скоро само препратка към него, т.е неговия четириbyteов address.Това е достатъчно за addressиране на данните в такива обекти. Java машината се справя с всички свързани сложности."

— Нищо от това не разбрах.

„По-рано казахме, че променливата е като кутия. Ако искате да съхраните числото 13 в нея, можете да напишете 13 на лист хартия и да го поставите в кутията.“

„Но си представете, че трябва да съхранявате нещо по-голямо в кутията (променлива). Например куче, кола or вашия съсед. Вместо да се опитвате да напъхате ненатисканото в кутията, можете да направите нещо по-лесно: използвайте снимка на кучето instead of на истинското куче, регистрационен номер instead of истинска кола or телефонния номер на вашия съсед instead of вашия съсед."

"Вземаме лист хартия и записваме телефонния номер на съседа. Това е като препратка към обект. Ако копираме листчето с телефонния номер на съседа и го поставим в няколко кутии, вече има повече препратки на вашия съсед. Но, Howто и преди, все още имате само един съсед. Това има смисъл, нали?"

„Важна характеристика на съхраняването на данни по този начин е, че можете да имате много препратки към един обект

„Колко интересно! Почти го разбрах. Кажете ми още веднъж, моля – Howво ще стане, ако присвоя променлива от съставен тип на друга променлива от същия съставен тип?“

„Тогава двете променливи ще съхраняват един и същ address. Това означава, че ако промените данните на обекта, към който се отнася една променлива, вие променяте данните, към които се отнася другата . И двете променливи се отнасят към един и същи обект . Разбира се, може да има много други променливи, които също съхраняват препратки към него."

"Какво правят променливите от съставни (референтни/класови) типове, ако не съдържат препратка към обект? Това изобщо възможно ли е?"

„Да, Амиго. Изпреварваш ме с въпроса си. Това е възможно. Ако променлива от референтен (съставен) тип не съхранява референция към обект, тогава тя съхранява това, което е известно като „нула reference'. По принцип това означава, че препраща към обект, чийто address е 0. Java машината обаче никога не създава обекти с този address, така че винаги знае, че ако референтната променлива съдържа 0, тогава тя не сочи към ниHowъв обект ."

Java code Описание
String s;
String s = null;
Еквивалентни твърдения.
Person person;
person = new Person();
person = null;
Създаваме променлива person, чиято стойност е нула.
Присвояваме му address на новосъздадения обект Person.
Присвояваме null на променливата.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Създаваме обект Cat и съхраняваме address му в променлива cat; cat.owner е равно на нула.
Задаваме cat.owner equals на address на новосъздадения обект Person.
cat.owner.name все още е равно на нула.
Задаваме cat.owner.name равно на "Бог"

„Правилно ли ви разбрах? Променливите са разделени на два типа: примитивни типове и референтни типове. Примитивните типове съхраняват стойности директно, докато референтните типове съхраняват препратка към обект. Примитивните типове включват int, char, boolean и много други. типовете включват всичко останало. Ние използваме класове, за да ги създадем."

— Напълно си прав, момчето ми.

"И така, казвате, че сте разбрали всичко. Ето няколко задачи, които ще ви помогнат да затвърдите знанията си."

3
Задача
Java Syntax,  нивоурок
Заключено
Where does a Person come from?
In Java, people come from the same place that other classes come from: from the programmer's head. It is important for the creator of a class to think through what is important for the class and what is not. If he or she does, then the class will make sense and be useful. Let's begin. Let's create a Person class that allows our Person to have a name, age, weight, and... money. And then we'll create an object.
3
Задача
Java Syntax,  нивоурок
Заключено
Family relations
A programmer can create a man and a woman with a couple of deft movements of his or her fingers. Easy-peasy: we'll write the appropriate classes and create objects. Let's work on a married couple: we'll create Man and Woman objects, and then save a reference to the Woman in man.wife, and a reference to the Man in woman.husband. You see? You don't even need a marriage license.
3
Задача
Java Syntax,  нивоурок
Заключено
Pay raise
It's good to be a programmer: your salary will grow rapidly. And if this doesn't happen, you can influence the situation with a little help from your hacker friends. Imagine that you have access to the automated payroll system. You need to write an interceptor method that will add $1000 to each salary payment.
1
Задача
Java Syntax,  нивоурок
Заключено
Part of a calculator
Let's make the computer count for us! Ultimately, that's what they were created for. In this task, we ask the computer to calculate the sum and product of two numbers. Everything is super simple: we declare int variables, assign them a value, add and multiply them, and then display the result.