Salut, Amigo! Aș dori să vă spun despre structura internă a variabilelor. După cum știți deja, fiecare variabilă este asociată cu o zonă de memorie în care este stocată valoarea sa. "

— Da. Mi-ai spus despre asta ultima dată.

— Minunat. E bine că îți amintești. Voi merge mai departe, atunci.

„Toate tipurile compozite constau din altele mai simple. Și ele, la rândul lor, constau din altele și mai simple. Până când, în cele din urmă, ajungem la tipuri primitive , care nu pot fi simplificate în continuare. Așa se numesc – tipuri primitive . Pentru de exemplu, int este un tip primitiv, dar String este un tip compus care stochează datele sale ca un tabel de caractere (unde fiecare caracter este un tip primitiv char )."

— Foarte interesant. Continuă.

„Tipurile compuse sunt formate prin gruparea celor simple. Numim astfel de tipuri clase . Când definim o nouă clasă într-un program, declarăm un nou tip de date compozit . Datele sale vor fi fie alte tipuri compozite, fie tipuri primitive.”

Cod Java Descriere
public class Person
{
   String name;
   int age;
}
Se declară un nou tip compozit – Person.
Datele sale sunt stocate în Stringvariabila (tip compus) nameși intvariabilă (tip primitiv).age
public class Rectangle
{
   int x, y, width, height;
}
Se declară un nou tip compozit – Rectangle.
Este format din patru intvariabile (de tip primitiv).
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Se declară un nou tip compozit – Cat. Are următoarele variabile:
owner, tip compozit Person
territory, tip compozit Rectangle
age, tip primitiv int
name, tip compozitString

„Deocamdată, totul este clar, oricât de ciudat ar părea”.

„Tipurile mari (compozite) conțin multe tipuri mici (primitive). De aceea obiectele de aceste tipuri ocupă multă memorie - mai mult decât variabilele tipurilor primitive. Uneori mult mai mult. Efectuarea operațiunilor de atribuire cu astfel de variabile obișnuia să dureze mult. timp și a necesitat copierea unor secțiuni mari de memorie.De aceea variabilele de tipuri compozite nu stochează obiectul în sine, ci mai degrabă doar o referință la acesta, adică adresa sa de patru octeți.Acest lucru este suficient pentru a adresa datele din astfel de obiecte. Mașina Java se ocupă de toate complexitățile asociate.”

— N-am înțeles nimic din toate astea.

"Am spus anterior că o variabilă este ca o cutie. Dacă doriți să stocați numărul 13 în ea, puteți scrie 13 pe o bucată de hârtie și o puneți în cutie."

„Dar imaginează-ți că trebuie să depozitezi ceva mai mare în cutie (variabilă). De exemplu, un câine, o mașină sau vecinul tău. În loc să încerci să împingi ceea ce nu împinge în cutie, ai putea face ceva mai ușor: folosește o fotografie al câinelui în locul câinelui propriu-zis, o plăcuță de înmatriculare în loc de o mașină adevărată sau numărul de telefon al vecinului tău în loc de al vecinului tău.”

„Luăm o hârtie și notăm numărul de telefon al vecinului. Aceasta este ca o referire la un obiect. Dacă copiem bucata de hârtie cu numărul de telefon al vecinului pe ea și o punem în mai multe cutii, acum sunt mai multe referințe. vecinului tău. Dar, ca și înainte, mai ai un singur vecin. Asta are sens, nu-i așa?"

„O caracteristică importantă a stocării datelor în acest fel este că puteți avea multe referințe la un singur obiect

"Ce interesant! Aproape am înțeles. Mai spuneți-mi o dată, vă rog - ce s-ar întâmpla dacă aș atribui o variabilă de tip compus unei alte variabile de același tip compozit?"

„Atunci cele două variabile ar stoca aceeași adresă. Asta înseamnă că, dacă modificați datele obiectului referit de o variabilă, modificați datele la care face referire cealaltă . Ambele variabile fac referire la același obiect . Desigur, pot fi multe alte variabile care stochează, de asemenea, referințe la el.”

"Ce fac variabilele tipurilor compuse (referință/clasă) dacă nu dețin o referință la un obiect? Este chiar posibil?"

„Da, Amigo. Mă începi cu întrebarea ta. Acest lucru este posibil. Dacă o variabilă de tip referință (compozit) nu stochează o referință la un obiect, atunci stochează ceea ce este cunoscut sub numele de „null”. referință". Practic, aceasta înseamnă că face referire la un obiect a cărui adresă este 0. Cu toate acestea, mașina Java nu creează niciodată obiecte cu această adresă, așa că știe întotdeauna că, dacă o variabilă de referință conține 0, atunci nu indică niciun obiect. ."

Cod Java Descriere
String s;
String s = null;
Declarații echivalente.
Person person;
person = new Person();
person = null;
Creăm o variabilă persoană a cărei valoare este nulă.
Îi atribuim adresa unui obiect Person nou creat.
Atribuim null variabilei.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Creăm un obiect Cat și stocăm adresa acestuia în variabilă cat; cat.proprietar este egal cu nul.
Setăm cat.owner egal cu adresa unui obiect Person nou creat.
cat.owner.name este încă egal cu nul.
Setăm cat.owner.name egal cu „Dumnezeu”

„Te-am înțeles corect? Variabilele sunt împărțite în două tipuri: tipuri primitive și tipuri de referință. Tipurile primitive stochează valori direct, în timp ce tipurile de referință stochează o referință la un obiect. Tipurile primitive includ int, char, boolean și multe altele. Referință tipurile includ orice altceva. Folosim clase pentru a le crea."

— Ai perfectă dreptate, băiete.

„Așadar, spui că ai înțeles totul. Iată câteva sarcini care te vor ajuta să-ți consolidezi cunoștințele.”

3
Sarcină
Java Syntax,  nivellecţie
Blocat
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
Sarcină
Java Syntax,  nivellecţie
Blocat
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
Sarcină
Java Syntax,  nivellecţie
Blocat
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
Sarcină
Java Syntax,  nivellecţie
Blocat
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.