Владимир Цишевский - Java как центр архипелага
- Название:Java как центр архипелага
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:1996
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Владимир Цишевский - Java как центр архипелага краткое содержание
Java как центр архипелага - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
тод не может быть переопределен в классах-наследниках.
Как и в C++, в языке Java классы могут быть абстрактными, то
есть не до конца конкретизированными. Это означает, что в клас-
се описаны методы, определения которых отсутствуют. Такие мето-
ды (как и сам класс) должны снабжаться описателем abstract.
Абстрактные методы должны конкретизироваться в производных
классах.
В языке Java имеется предопределенная иерархия классов, содер-
жащихся в пакете java.lang. На рис. 9 эта иерархия представлена
графически.
Рис. 9. Иерархия предопределенных классов языка Java.
В этой иерархии несколько особняком стоит класс Class. Програм-
мист не может создать об®ект класса Class (правда, существуют и
другие классы с этим свойством). Ссылки на об®кт класса Class
можно получить с помощью метода getClass, определенного для об-
®ектов класса Object.
Об®екты класса Class используются для получения во время выпол-
нение информации о "классовых" свойствах об®екта. К об®ектам
класса Class, помимо прочих, применимы следующие методы:
1 public native String getName();
2 public native Class getSuperclass();
3 public static native Class forName(String className)
throws ClassNotFoundException;
Метод forName позволяет получить ссылку на класс по его имени.
Описатель native свидетельствует о том, что метод реализуется
средствами, внешними по отношению к Java-системе (например, пи-
шется на языке C).
4.1.1.2. Наследование
Модель наследования в языке Java существенно отличается от мо-
дели C++. Во-первых, в Java нет множественного наследования.
Во-вторых, в языке предусмотрены средства для запрета дальней-
шего наследования (ключевое слово final перед определением
класса). В-третьих, в языке Java присутствует новое по отноше-
нию к C++ понятие интерфейса.
Интерфейс представляет собой набор описаний методов. Пример:
public interface Verbose {
public void drawOn (Graphics g);
public void printOn (OutputStream os);
}
public class Star extends Polygon implements Verbose {
public void drawOn (Graphics g) {
// Конкретная реализация отрисовки
}
public void printOn (OutputStream os) {
// Конкретная реализация печати
}
}
public class Text extends StringBuffer implements Verbose {
public void drawOn (Graphics g) {
// Конкретная реализация отрисовки
}
public void printOn (OutputStream os) {
// Конкретная реализация печати
}
}
public class Blackboard extends Canvas {
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;
Читать дальшеИнтервал:
Закладка: