четвер, 19 липня 2012 р.

Складні типи

Всі складні типи складаються з більш простих. Ті, в свою чергу, ще більш простих. Поки, нарешті, справа не доходить до самих примітивних, неподільних типів.
Їх так і називають – примітивні типи. Наприклад, int – це один з примітивних типів, а String – це вже складний тип, зберігає свої дані у вигляді таблиці символів (де кожен символ - це примітивний тип char).

Складні типи утворюються з простих шляхом угруповання. Такі типи ми називаємо класами. Коли ми описуємо у програмі новий клас – це означає, що ми оголошуємо новий складний складений тип, дані якого будуть або іншими складними типами, або примітивними типами.


Код на Java
Опис
public class Person
{
   String name;
   int age;
}
Об’явили новий складний тип – Person.
Його дані – це змінна
name типу String (складний тип) і змінна age типу int(примітивний тип)
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


Т. к. великі (складні) типи містять у собі багато маленьких (примітивних), то їх об'єкти займають багато пам'яті. Більше, ніж звичайні змінні примітивних типів. Іноді набагато більше. Присвоювання таких змінних виконувалося дуже довго і вимагало копіювання великих обсягів пам'яті. Тому змінні складних типів зберігають у собі не сам об'єкт, а лише посилання на нього! Тобто чотирьохбайтовий адрес. Цього вистачає, щоб можна було звертатися до даних цих об'єктів. Всю складність, пов'язану з цим, бере на себе Java-машина.

Код на Java
Опис
String s;
String s = null;
Еквівалентні записи.
Person person;
person = new Person();
person = null;
Створили змінну person, її значення null.
Занесли в її адрес нового створеного об’єкту.
Присвоїли змінній посилання null.
Cat cat = new Cat();


cat.owner = new Person();


cat.owner.name = "God";
Створили об’єкт Cat, занесли його ссилку в змінну cat. cat.owner дорівнює null.
Занесли в cat.owner ссилку на новостворений об’єкт Person.
cat.owner.name поки ще null. 


cat.owner.name присвоїли значення – God.

Змінні діляться на два типи: примітивні і ссилочні. Примітивні типи у себе всередині зберігають значення, а ссилочні – посилання на об'єкт. Примітивні типи – це int, char, boolean і ще трохи, а ссилочні типи – це всі інші, і утворюються вони за допомогою класів.

Код на Java
Опис
Cat cat;
Оголошує посилальну змінну з ім'ям cat і типомCat.. Значення змінної cat – посилання null.
new Cat();
Створює об'єкт типу Cat.
Cat cat = new Cat();
Створює посилальну змінну типу cat cat.
Створює новий об'єкт типу Cat. Присвоює в змінну cat посилання на новостворений об'єкт.
Cat murzik = new Cat();
Cat vaska = new Cat();
Створюються два об'єкта, посилання на які присвоюються двом різним змінним відповідно.
Cat murzik = new Cat();
Cat vaska = new Cat();


vaska = murzik;
Створюються два об'єкта, посилання на які присвоюються двом різним змінним.

Потім, змінній vaska присвоюється посилання на об'єкт, що міститься в змінній murzik.. Тепер обидві змінних посилаються на перший створений об'єкт.
(На другий більше ніхто не посилається – другий об'єкт вважається сміттям)
Cat murzik = new Cat();
Cat vaska = null;

vaska = murzik;

murzik = null;
Створюється один об'єкт типу Cat, посилання на який заноситься в першу змінну (murzik), друга змінна (vaska) містить порожню (нульову) посилання.

Обидві змінні посилаються на один об'єкт.

Тепер тільки vaska посилається на об'єкт, але не murzik.


1 Модифікатор «public»

До змінної, методу або класу, позначеного модифікатором public, можна звертатися з будь-якого місця програми. Це найвища ступінь відкритості - ніяких обмежень немає.

2 Модифікатор «private»

До змінної або методу, позначеному модифікатором private, можна звертатися тільки з того ж класу, де він оголошений. Для всіх інших класів позначений метод або змінна - невидимі і «як би не існують». Це найвища ступінь закритості – тільки свій клас.

3 Без модифікатора

Якщо змінна або метод не помічені ніяким модифікатором, то вважається, що вони помічені «модифікатором за замовчуванням». Змінні або методи з таким модифікатором (тобто взагалі без якого-небудь) видно всім класам пакету, в якому вони оголошені. І тільки їм. Цей модифікатор ще іноді називають «package», натякаючи, що доступ до змінних і методів відкритий для всього пакету, в якому знаходиться їх клас



Немає коментарів:

Дописати коментар