Java как центр архипелага - [5]

Шрифт
Интервал

средствами, внешними по отношению к 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 об®единяются в пакеты. Все классы, входящие

в  один пакет, являются дружественными по отношению друг к дру-

гу, то есть имеют взаимный доступ к переменным и методам,  если


Рекомендуем почитать
Программирование приложений для мобильных устройств под управлением Android. Часть 1

Книга посвящена разработке программ для мобильных устройств под управлением операционной системы Android. Рассматривается создание приложений с использованием системных компонентов и служб Android. Приведены базовые данные о структуре приложений, об основных классах и их методах, сопровождаемые примерами кода. Часть 1 содержит шесть глав, описывающих основные принципы создания приложений, пользовательский интерфейс, полномочия приложений, а так же базовые классы: Activity, Intent, Fragment. Книга предназначена для программистов, владеющих языком программирования Java и желающих освоить написание приложений, работающих под ОС Android.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Платформа J2Me

Эта книга научит вас, как разрабатывать программное обеспечение для платформы J2ME компании «Sun Microsystems». Эта книга придерживается стиля учебного пособия, это не справочное руководство.Цель — дать вам твердую основу в понятиях и техниках, которая даст вам возможность решиться на самостоятельную разработку качественных приложений.


Обработка баз данных на Visual Basic.NET

Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000.


Исчерпывающее руководство по написанию всплывающих подсказок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Создаем порт для FreeBSD своими руками. Часть II

Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?