Пять уроков по Java

       

Классы


Рассмотрим теперь, как описываются основные базовые строительные блоки языка Java - классы. Схема синтаксиса описания класса такова:

[Модификаторы]

class ИмяКласса

[extends ИмяСуперкласса]

[implements ИменаИнтерфейсов]

{

Данные класса;

Методы;

}

где:

Модификаторы - ключевые слова типа static, public и т.п., модифицирующие поведение класса по умолчанию;

ИмяКласса - имя, которое вы присваиваете классу;

ИмяСуперкласса - имя класса, от которого наследуется ваш класс;

ИменаИнтерфейсов - имена интерфейсов, которые реализуются данным классом (об этом в следующем занятии).

Типичный пример класса мы уже приводили ранее. Это класс аплета, выводящего строку на экран.

Схема описания методов класса сродни описанию простых функций в языках C и C++:



[Модификаторы]

ВозвращаемыйТип ИмяМетода

(Список Параметров)

{

[Тело Метода]

}

В показанном ранее примере описан всего один общедоступный метод Paint, возвращающий тип void и принимающий один параметр graph типа Graphics.

Как и в C++, в классах Java имеются конструкторы. Их назначение полностью совпадает с назначением аналогичных методов C++. Конструкторы могут быть перегружены (overload), т. е. в одном классе может быть несколько конструкторов, отличающихся передаваемыми параметрами.

В отличие от C++ в языке Java предусмотрен единственный способ распределения памяти - оператором new. В отношении выделения блоков памяти во многом действуют те же правила, что и в C++. Но есть и исключение: в Java имеется возможность динамического задания имени создаваемого класса, как говорится, "на лету":

ClassVar = new ("Class" + "Name");

Здесь операцией конкатенации (объединения) строк создается новая строка "ClassName", которая передается оператору new в качестве параметра. В свою очередь, new создает класс с именем ClassName типа Object (каждый раз, когда тип создаваемого объекта не указан, предполагается тип Object). По мнению автора, разработчики Java позаимствовали операцию конкатенации строк "+" из языка программирования Pascal. Кстати, о типе Object. Это базовый тип для любого класса в Java (заимствовано из идеологии языка SmallTalk). Даже когда вы, создавая новый класс, явно не указываете его предка, предполагается, что это класс Object.


Классы и их отдельные члены могут быть статическими. В этом случае они помечаются ключевым словом static. Преимущество статических членов состоит в том, что они становятся разделяемыми между всеми классами-потомками и экземплярами класса. Это значит, что, ссылаясь на несколько унаследованных классов или несколько экземпляров, на самом деле вы ссылаетесь на один и тот же член класса, расположенный в одном и том же участке памяти. В дополнение к стандартным статическим определениям в Java есть инициализаторы - блоки кода, помеченные ключевым словом static. Их задача - инициализация статических переменных. При загрузке класса сначала выполняются блоки инициализации, а уже потом начинается присвоение значений простым переменным, которые инициализируются в порядке их описания. То же справедливо и для блоков инициализации. В примере, показанном ниже, переменные инициализируются в следующем порядке: xxx, yyy.

class StaticClass

{

short zzz = 10;

static int xxx;

static float yyy;

static

{

xxx = 12345;

yyy = 3.1415;

}

}

Далее выполняется блок инициализации, и уже потом производится инициализация переменной zzz.


Содержание раздела