Класи і об’єкти

Java, як і будь-який інший обєктно-орієнтована мова програмування, має засобами побудови класів і обєктів Кожен обєкт в Java має тип ним є той клас, до якого належить даний обєкт У кожному класі є члени двох видів: поля і методи

Полями називаються змінні, що містять дані класу і його обєктів У

них зберігаються результати обчислень, виконуваних методами даного класу

Методи містять виконуваний код класу Методи складаються з операторів ці оператори, а також спосіб виклику методів в кінцевому рахунку визначають процес виконання програми

Так може виглядати оголошення простого класу, що представляє точку на площині:

class Point {

public double x, y

}

Клас Point містить два поля з координатами x і y точки, і в ньому немає жодного методу (звичайно ж, в поточній реалізації) Подібне оголошення класу визначає, як будуть виглядати обєкти, створені на його основі, а також задає поведінку обєктів за допомогою ряду інструкцій Креслення набуває найбільшу цінність після того, як до нього додаються технічні завдання та інструкції

Члени класу можуть володіти різними правами доступу Оголошення полів x і y класу Point з ключовим словом public означає, що будь-який метод програми, що отримав доступ до обєкта Point, зможе прочитати або змінити ці поля Дозволяється обмежити доступ до даних і надавати його лише методам самого класу або повязаних з ним класів

161 Створення обєктів

Обєкти створюються за допомогою виразів, в яких використовується ключове слово new Створені на основі визначення класу обєкти часто називають екземплярами даного класу

У мові Java створювані обєкти розміщуються в області системної памяті, яка називається купою (heap) Доступ до будь-якого обєкта здійснюється за допомогою посилання на обєкт – Замість самого обєкта в змінних міститься лише посилання на нього Коли посилання не відноситься ні до якого обєкту, вона дорівнює null

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

Повертаючись до певного вище класу Point, давайте припустимо, що ми розробляємо графічне додаток, в якому доводиться стежити за безліччю точок Кожна точка представляється окремим обєктом Point Ось як може виглядати створення і ініціалізація обєктів Point:

Point lowerLeft = new Point() Point upperRight = new Point() Point middlePoint = new Point()

lowerLeftx = 00

lowerLefty = 00

upperRightx = 12800

upperRighty = 10240

middlePointx = 6400

middlePointy = 5120

Кожен обєкт класу Point володіє власною копією полів x і y Наприклад, зміна поля x обєкта lowerLeft ніяк не впливає на значення x обєкта upperRight Поля обєктів іноді називають змінними екземпляра (instance variables), Оскільки в кожному обєкті (примірнику) класу міститься окрема копія цих полів

162 Статичні поля

Найчастіше буває потрібно, щоб значення поля одного обєкта відрізнялося від значень однойменних полів у всіх інших обєктах того ж класу

Проте іноді виникає необхідність спільного використання поля всіма обєктами класу Такі спільні поля також називаються змінними класу – Тобто змінними, що відносяться до всього класу, на відміну від змінних, що належать до його окремих обєктах

Для чого потрібні змінні класу Давайте уявимо собі фабрику, що виробляє плеєри Sony (Sony Walkman) Кожному плеєру присвоюється унікальний серійний номер У наших термінах це означає, що в кожному обєкті є унікальне поле, в якому зберігається значення номера Однак фабрика повинна знати значення номера, який повинен бути присвоєний наступного плеєру Дублювати цю інформацію в кожному обєкті-плеєрі було б нерозумно – потрібна всього одна копія номера, яка зберігається на самій фабриці, іншими словами – у змінній класу

Щоб використовувати поле для зберігання інформації, що відноситься до всього класу, слід оголосити його з ключовим словом static, тому такі поля іноді називають статичними Наприклад, обєкт Point, що представляє початок координат, може зустрічатися досить часто, тому має сенс виділити йому окреме статичне поле в класі Point:

public static Point origin = new Point()

Якщо це оголошення зустрінеться всередині оголошення класу Point, то зявиться рівно один примірник даних з імям Pointorigin, який завжди буде посилатися на обєкт (0,0) Поле static буде присутній завжди, незалежно від того, скільки існує обєктів Point (навіть якщо не було створено жодного обєкта) Значення x і y дорівнюють нулю, тому що числові поля, яким не було присвоєно початкового значення, за замовчуванням инициализируются нулями

Ми вже зустрічалися із статичним обєктом у нашій першій програмі Клас System – стандартний клас Java, в якому є статичне поле з імям out, призначене для направлення виведення програми в стандартний вихідний потік

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

163 Збирач сміття

Припустимо, ви створили обєкт за допомогою виклику new але як позбутися цього обєкта, коли він виявиться непотрібним Відповідь проста – ніяк Невикористані обєкти Java автоматично знищуються складальником сміття Збирач сміття працює у фоновому режимі і стежить за посиланнями на обєкти Коли посилань на обєкт більше не залишається, зявляється можливість прибрати його з купи, де він тимчасово зберігався, хоча саме видалення може бути відкладено до більш відповідного моменту

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*