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

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

7       }

8       Point () {

9         this (0.0, 0.0);

10      }

11      public void setX (double x) {

12        this.x = x;

13      }

14      public void setY (double y) {

15        this.y = y;

16      }

        . . .

17    }

В  языке  Java  нельзя отрывать определение метода (функции) от

описания заголовка. Синтаксическая конструкция class  полностью

включает  в себя всю информацию о классе. В частности, реализа-

ции методов обязаны содержаться внутри этой конструкции.

Для  обозначения  наследования  используется   ключевое   слово

extends (строка 1). Класс Object - это корень дерева наследова-

ния.  В  Java  не бывает классов-"сирот": у всех классов, кроме

Object, есть предшественник. Подробнее наследование и предопре-

деленные классы будут рассмотрены далее.

Режимы доступа к элементам класса (private, protected,  public)

те  же,  что  и  в C++, за одним важным исключением. Если режим

доступа опущен,  предполагается,  что  соответствующий  элемент

доступен в пределах пакета (см. далее).

В строке 9 приведен пример явного вызова одного конструктора из

другого.

Прочие  приведенные выше строки не нуждаются в пояснениях кроме

одной - отсутствующей. В языке  Java  не  бывает  деструкторов.

Причина в том, что управление памятью автоматизировано (в фоно-

вом  режиме  работает сборщик мусора). Для высвобождения прочих

ресурсов, ассоциированных с об®ектом, служит специальный  метод

finalize.  Этот метод вызывается сборщиком мусора в момент ути-

лизации памяти, занимавшейся об®ектом.

Ключевое слово this (см., например, строки 5 и 9)  используется

для  ссылки на самого себя. Аналогичную роль по отношению к ро-

дительскому классу играет слово super:

1     class ThreePoint extends Point {

2       protected double z;

3       ThreePoint () {

4         super ();

5         z = 0.0;

6       }

7       ThreePoint (double x, double y, double z) {

8         super (x, y);

9         this.z = z;

10      }

11    }

В строках 4 и 8 вызываются конструкторы родительского класса.

Приведенные примеры показывают, что в языке Java,  как  и  C++,

методы  могут быть перегруженными, то есть под одним именем мо-

гут фигурировать разные методы с разным набором параметров.

Как и C++, с помщью ключевого  слова  static  можно  определить

данные  и  методы,  которые  являются  общими для всех об®ектов

класса. (Отметим попутно, что функций, не принадлежащих какому-

либо классу, в языке Java не бывает.) Следующий пример содержит

фрагменты стандартного пакета java.lang.

1 public final

2 class Character extends Object {

3     public static final int MAX_ъADIX = 36;

4     static char downCase[];

5     static {

6         char down[] = new char[256];

7         for (int i = 0 ; i < 256 ; i++) {

8             down[i] = (char) i;

9       }

10        for (int lower = 'a' ; lower <= 'z' ; lower++) {

11            int upper = (lower + ('A' - 'a'));

12            down[upper] = (char)lower;

13      }

14        for (int lower = 0xE0; lower <= 0xFE; lower++) {

15            if (lower != 0xF7) { // multiply and divide

16                int upper = (lower + ('A' - 'a'));

17                down[upper] = (char)lower;

18            }

19        }

20      downCase = down;

21    }

22    public static boolean isLowerCase(char ch) {

23      return (upCase[ch] != ch);

24    }

25 }

Прокомментируем этот пример с точки зрения отличий Java от C++.

Строки с 5 по 21 представляют собой  инициализацию  статических

данных  класса, которая осуществляется в момент загрузки класса

в Java-машину. По сути этот код играет роль конструктора класса

Character.

В строках 1 и 3 встречается ключевое слово final.  В  строке  1

это   слово   обозначает   запрет  на  наследование  от  класса

Character. В строке 3 его смысл аналогичен  описателю  const  в

C++.

Если слово final использовано в заголовке метода, то данный ме-

тод не может быть переопределен в классах-наследниках.

Как  и  в  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  свидетельствует о том, что метод реализуется


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


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

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.