WDH Java - Типи, значення та змінні
Java - строготипізована мова. Це означає, що кожна змінна та кожен вираз Java повинен мати тип, визначений на етапі компіляції. Кожен тип має певний діапазон значень та визначає набір застосовних до нього операцій та їх зміст. Сувора типізація допомагає виявляти помилки у програмі на етапі компіляції.
Усі типи в Java поділяються на примітивні та посилальні. Примітивними є логічний типboolean, цілі числові типиbyte,short,int,long,char і плаваючі числові типиfloat таdouble. До типів посилань відносяться класи, інтерфейси і масиви. Існує також спеціальний нульовий тип.
Об'єкт в Java це або динамічно створений екземпляр класу, або динамічний створений масив. Значеннями посилання типу є посилання на об'єкти. Усі об'єкти, включаючи масиви, успадковують методи класу Object. Рядки представляються об'єктами класу String.
Змінна це іменоване сховище даних певного типу. Точніше кажучи:
- Змінна примітивний тип завжди містить значення саме цього типу.
- Змінна типу клас може містити значенняnull (нульове посилання), або посилання на об'єкт даного класу або його спадкоємця.
- Змінна типу інтерфейс може містити або нульове посилання або посилання на об'єкт будь-якого класу, що реалізує даний інтерфейс.
- Змінна типу "array of T", де T примітивний тип, може містити або нульове посилання, або посилання на об'єкт типу "quotarray of T\".
- Змінна типу "array of T", де T ¦ посилальний тип, може містити або нульове посилання, або посилання на масив, що складається з даних, сумісних з T присвоєння.
- Змінна типу Object може містити абонульове посилання або посилання на будь-який об'єкт.
5.3.2. Примітивні типи
5.3.2.1. Тип boolean
Типboolean складається з двох логічних констант:true (істина) таfalse (брехня). Логічне значення може бути наведено до типуboolean, інші неявні приведення до цього типу Java відсутні. Логічне значення може бути перетворено на рядок за правилом неявного перетворення рядків.
Приклад декларації логічної змінної:
5.3.2.2. Цілі числові типи
Значення цілих числових типів лежать у наступних діапазонах.
- byte : від -128 до 127 включно (8 біт);
- short : від -32768 до 32767 включно (16 біт);
- int : від -2147483648 до 2147483647 включно (32 біти);
- long : від -9223372036854775808 до 9223372036854775807 включно (64 біти)
- char : від '\u0000' до'uffff' включно, тобто, від 0 to 65535 (16 біт без знака).
Якщо хоча б один з операндів має типlong, то другий операнд також наводиться до цього типу, і результат операції матиме типlong (винятком є операції зсуву). В інших випадках усі операнди наводяться до типуint, і результат операції також має типint.
Будь-яке значення цілого типу може бути наведено до будь-якого числового типу. Неявні приведення цілих числових типів до типу boolean і навпаки в Java відсутні.
Приклади декларацій цілих змінних:
5.3.2.3. Плаваючі числові типи
Java містить два плаваючі типиfloat іdouble, які відповідають 32-бітової та 64-бітової реалізації формату IEEE 754.
Ці типи містять такі спеціальні значення: "Не число"Float.NaN таDouble.NaN, позитивна нескінченність+Infinity (або простоInifinity ) і негативна нескінченність-Infinity. Зазначимо також, що в даному форматі розрізняються позитивний нуль (+0 або0 ) та негативний нуль (-0 ). ЗначенняNaN має ту особливість, що воно не дорівнює жодному числовому значенню, включаючи самого себе.
Якщо хоча б один з операнда має типdouble, то другий операнд також приводиться до цього типу, і результат операції буде мати типdouble. В інших випадках усі операнди приводяться до типуfloat, і результат операції також має типfloat.
Будь-яке значення плаваючого типу може бути наведено до будь-якого числового типу. Неявні приведення плаваючих числових типів до типу boolean і навпаки в Java відсутні.
Приклади декларацій плаваючих змінних:
5.3.3. Посилальні типи
Як було зазначено вище, до типів посилань відносяться класи, інтерфейси і масиви. У наступному прикладі
оголошено клас Point, що містить масив metrics, та інтерфейс Move, що містить метод move.
Два типи посилань вважаються однаковими, якщо:
- обидва вони є класами або інтерфейсами, завантажуються одним завантажувачем класів і мають те саме повне ім'я;
- обидва є масивами, які з елементів однієї й тієї ж типу.
5.3.3.1. Об'єкти
5.3.3.2. Клас Object
Стандартний клас Object є предком решти класів Java, які успадковують його методи. Докладно ці методи описані в гол. 5.14.
5.3.3.3. Клас String
Оператор конкатенації рядків явно створює новий об'єкт класу String.
5.3.4. Змінні
Змінна - це сховище даних певного типу,зазвичай має унікальне ім'я. Змінна завжди містить значення, яке сумісне для присвоєння з її типом. Значення змінної змінюється операцією присвоєння чи операціями префіксного/постфіксного інкременту/декременту.
5.3.4.1. Види змінних
У Java існують сім різновидів змінних:
- Змінна класу – це статичне поле даних у декларації класу або будь-яке поле даних у декларації інтерфейсу. Змінна класу створюється під час завантаження її класу чи інтерфейсу; відразу після створення їй надається значення за умовчанням. Змінна класу знищується, коли її клас чи інтерфейс вивантажується (після завершення його фіналізації).
- Змінна реалізації - це поле даних у декларації класу, яке не є статичним. Така змінна створюється і набуває значення за умовчанням під час створення екземпляра даного класу чи класу, що його нащадком. Змінна продаж знищується, коли відповідний екземпляр класу видаляється процедурою складання сміття (після завершення його фіналізації).
- Елементи масиву - це неіменовані змінні, які створюються і набувають значення за умовчанням при створенні масиву. Ці змінні знищуються, коли масив видаляється процедурою збирання сміття.
- Параметри конструктора - це імена значень аргументів, що передаються конструктору. Для кожного параметра в декларації конструктора створюється нова змінна щоразу, коли викликається цей конструктор (явно чи неявно). Цій змінній надається фактичне значення аргументу, передане конструктору під час виклику. Змінна знищується після завершення виконання конструктора.
- Параметри методу - це імена значень аргументів, що передаються методу. Для кожного параметра вДекларації методу створюється нова змінна щоразу, коли викликається даний метод. Цій змінній надається фактичне значення аргументу, передане методу виклику. Змінна знищується після завершення виконання тіла методу.
- Параметр обробника винятків створюється щоразу, коли виконується частинаcatch оператораtry. Його значенням стає об'єкт, асоційований з винятком. Змінна знищується після завершення виконання блокуcatch.
- Локальні змінні. Щоразу, коли під час виконання програми управління передається новому блоку чи операторуfor, кожної декларації змінної всередині цього блоку чи оператора створюється відповідна локальна змінна. Якщо декларація містить початкове значення змінної, їй присвоюється це значення. Локальна змінна знищується після завершення виконання блоку або оператора, в якому вона оголошена.
Наступний приклад містить декларації кількох змінних перерахованих різновидів:
5.3.4.2. Початкові значення змінних
Перед тим, як до змінної можна буде звертатися, їй має бути надано значення. При цьому