public void drawVerbose (Verbose d) {
Graphics g = getGraphics ();
d.drawOn (g);
}
}
Интерфейс Verbose содержит два метода. Первый предназначен для
рисования в графическом контексте, второй - для распечатки в
выходной поток.
Класс Star предствляет собой подкласс многоугольников
(Polygon). Помимо прочего, мы хотим рисовать об®екты этого
класса на доске (Blackboard) и выводить их описание в файл.
Для об®ектов класса Text мы хотим иметь возможность начертать
текст на доске и выводить его в файл.
Класс Blackboard - наследник класса Canvas, специально предназ-
наченного для рисования. Как мы видим, этот класс с помощью
единственного метода справляется с рисованием об®ектов, не име-
ющих общего предка (кроме класса Object).
Таким образом, с помощью интерфейсов можно компенсировать от-
сутствие множественного наследования. В контексте наследования
интерфейс можно рассматривать как абстрактный класс, не содер-
жащий данных.
4.1.1.3. Жизненный цикл об®екта
Об®екты создаются с помощью оператора new. Инициализация об®ек-
та производится с помощью соответствующего конструктора. Эти
операции разделить нельзя - за new следует конструктор. Пример.
Point myPoint = new Point ();
Других способов создания об®ектов (кроме оператора new) язык
Java не предоставляет.
Об®ект существует до тех пор, пока на него есть ссылки (то есть
пока он прямо или косвенно доступен хотя бы из одной перемен-
ной). В языке отсутствуют явные средства удаления об®ектов.
После того, как об®ект стал недоступен, он оказывается кандида-
том для утилизации сборщиком мусора.
Об®ект может стать недоступным, если хранившей его переменной
присвоено новое значение или если эта переменная перестала быть
доступной (произошел выход из блока). Пример.
Point p = new Point (100.0, 100.0);
. . .
p = new Point (1.0, 1.0);
// На точку с координатами (100, 100) ссылок больше нет
{
String s = new String ("Local string");
System.out.println (s);
}
// На строку "Local string" ссылок больше нет
В момент утилизации об®екта сборщиком мусора будет вызван метод
finalize. Из-за того, что сборщик мусора работает в фоновом ре-
жиме, вызов finalize является асинхронным.
4.1.2. Примитивные типы данных
В языке Java существует набор встроенных типов данных, которые
не являются об®ектами. Их не так много.
Представление чисел в языке Java фиксировано и, тем самым, не
зависит от аппаратной платформы.
- целые числа:
- - byte - 8 бит,
- - short - 16 бит,
- - int - 32 бита,
- - long - 64 бита.
Все числа со знаком, спецификатор unsigned в языке отсутствует.
- числа с плавающей точкой:
- - float - 32 бита,
- - double - 64 бита.
Представление должно соответствовать стандарту IEEE 754.
- char
Значение типа char есть 16-разрядное число без знака (диапазон
0-65535). Кодировка соответствует стандарту Unicode. В резуль-
тате с самого начала закладывается здоровая основа для решения
проблемы локализации Java-программ.
- boolean
Содержит значения true и false, которые не могут быть преобра-
зованы в другой тип.
В языке Java, разумеется, присутствуют массивы. Эти массивы ти-
пизированы. Декларация
Point myPoints[];
описывает переменную myPoints как массив об®ектов типа Point.
Завести массив определенного размера можно с помощью инструкции
вида
myPoints = new Point[10];
Значения элементов массива при этом устанавливаются равными
специальной величине null.
Размер массива может быть получен во время выполнения програм-
мы:
howMany = myPoints.length;
Других структурных типов (не являющихся об®ектами) в языке Java
нет, то есть нет структур, об®единений и т.п. Нет в Java и ука-
зателей.
Отметим, что строки символов являются об®ектами типа String
(текстовые константы) или StringBuffer (изменяемые строки).
Пример,
String hello = "Hello world!";
4.1.3. Пакеты
Классы в языке Java об®единяются в пакеты. Все классы, входящие
в один пакет, являются дружественными по отношению друг к дру-
гу, то есть имеют взаимный доступ к переменным и методам, если
противное не оговорено явно посредством спецификаторов private
или protected.
Пакеты разграничивают пространства имен. "Просто глобальных"
имен в языке Java не бывает.
Пакет оформляется с помощью синтаксической конструкции вида
package my_packages.pack1:
Инструкция package должна стоять первой в файле с исходным
Java-текстом. Она действует до конца файла.
Пакеты могут импортироваться другими пакетами посредством инст-
рукции import. Примеры,
import java.util;
import java.util.HashTable;
import java.util.*;
Читать дальше