Java как центр архипелага | страница 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. Програм-