242ea16c

Классы



Классы

Рассмотрим теперь, как описываются основные базовые строительные блоки языка 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.


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