Класс — центральный компонент Java. Поскольку класс определяет форму и сущность объекта, он является той логической конструкцией, на основе которой построен весь язык. Как таковой, класс образует основу объектно-ориентированного программирования в среде Java. Любая концепция, которую нужно реализовать в программе Java, должна быть помещена внутрь класса.
Скачать исходники для статьи можно ниже
ОСНОВЫ КЛАССОВ.
Вероятно, наиболее важное свойство класса то, что он определяет новый тип данных. После того как он определен, этот новый тип можно применять для создания объектов данного типа. Таким образом, класс — это шаблон объекта, а объект — это экземпляр класса. Поскольку объект является экземпляром класса, термины объект и экземпляр используются как синонимы.
ОБЩАЯ ФОРМА КЛАССА.
При определении класса объявляют его конкретную форму и сущность. Для
этого указывают данные, которые он содержит, и кода, воздействующего на эти данные. Хотя очень простые классы могут содержать только код или только данные, большинство классов, применяемых в реальных программах, содержит оба эти компонента.
Для объявления класса служит ключевое слово class. Использованные до сих пор классы в действительности представляли собой очень ограниченные примеры полной формы. Классы могут быть (и обычно являются) значительно более сложными. Упрощенная общая форма определения класса имеет следующий вид.
class имя_класса { тип переменная_экземпляра1; Основы классов Общая форма класса тип переменная_экземпляра2; // . . . тип переменная_экземпляра; тип имя_метода1 (список_параметров) { // тело метода } тип имя_метода2 (список_параметров) { // тело метода } // . . . тип имя_методаN ( список_параметров) { // тело метода } }
Данные или переменные, определенные внутри класса, называются переменными экземпляра. Код содержится внутри методов. Определенные внутри класса методы и переменные вместе называют членами класса. В большинстве классов действия с переменными экземпляров и доступ к ним осуществляют методы, определенные в этом классе. Таким образом, в общем случае именно методы определяют способ использования данных класса.
Определенные внутри класса переменные называют переменными экземпляра,
поскольку каждый экземпляр класса (т.е. каждый объект класса) содержит собственные копии этих переменных.
Все методы имеют ту же общую форму, что и метод main (), который мы использовали до сих пор. Однако большинство методов не будет указано как static или public. Обратите внимание на то, что общая форма класса не содержит определения метода main (). Классы Java могут и не содержать этот метод. Его обязательно указывать только в тех случаях, когда данный класс служит начальной точкой программы. Более того, некоторые типы приложений Java, такие как аплеты, вообще не требуют использования метода main ().
ПРОСТОЙ КЛАСС.
Изучение классов начнем с простого примера. Ниже приведен код класса Box (Параллелепипед), который определяет три переменные экземпляра: width (ширина), height (высота) и depth (глубина). В настоящий момент класс Box не содержит никаких методов.
class Box { double width; double height; double depth; }
Как уже было сказано, класс определяет новый тип данных. В данном случае новый тип данных назван Box. Это имя будет использоваться для объявления объектов типа Box. Важно помнить, что объявление class создает только шаблон, но не действительный объект. Таким образом, приведенный код не приводит к появлению никаких объектов типа Box.
Чтобы действительно создать объект класса Box, нужно использовать оператор, подобный следующему.
Box mybox = new Box(); // создание объекта mybox класса Box
После выполнения этого оператора mybox станет экземпляром класса Box. То есть он обретет “физическое” существование.
ОБЪЯВЛЕНИЕ ОБЪЕКТОВ.
При создании класса вы создаете новый тип данных.
Этот тип можно использовать для объявления объектов данного типа. Однако создание объектов класса — двухступенчатый процесс. Вначале необходимо объявить переменную типа класса. Эта переменная не определяет объект. Она представляет собой всего лишь переменную, которая может ссылаться на объект. Затем потребуется
получить действительную, физическую копию объекта и присвоить ее этой
переменной. Это можно сделать при помощи оператора new. Этот оператор динамически (т.е. во время выполнения) резервирует память под объект и возвращает ссылку на него. В общих чертах эта ссылка представляет собой адрес объекта в памяти, зарезервированной оператором new. Затем эта ссылка сохраняется в переменной.
Таким образом, в Java все объекты классов должны создаваться динамически.
Рассмотрим эту процедуру более подробно.
Box mybox = new Box();
Этот оператор объединяет только что описанные этапы. Чтобы каждый этап
был более очевидным, его можно переписать следующим образом.
Box mybox; // объявление ссылки на объект mybox = new Box(); // резервирование памяти для объекта Box
Первая строка объявляет mybox ссылкой на объект класса Box. После выполнения этой строки переменная mybox содержит значение null, свидетельствующее о том, что она еще не указывает на реальный объект. Любая попытка использования переменной mybox на этом этапе приведет к ошибке времени компиляции.
Следующая строка резервирует память под реальный объект и присваивает переменной mybox ссылку на этот объект. После выполнения второй строки переменную mybox можно использовать, как если бы она была объектом класса Box. Но в действительности переменная mybox просто содержит адрес памяти реального объекта класса Box.
ПОДРОБНОЕ РАССМОТРЕНИЕ ОПЕРАТОРА NEW.
Оператор new динамически резервирует память для объекта.
Общая форма этого оператора имеет следующий вид.
переменная_класса = new имя_класса ();
Здесь переменная_класса — переменная создаваемого класса. Имя_класса это имя класса, конкретизация которого выполняется. Имя класса, за которым следуют круглые скобки, указывает конструктор данного класса.
Конструктор определяет действия, выполняемые при создании объекта класса. Конструкторы — важная часть всех классов, и они обладают множеством важных атрибутов.
Большинство классов, используемых в реальных программах, явно определяют свои конструкторы внутри определения класса. Однако если никакой явный конструктор не указан, Java автоматически предоставит конструктор, используемый по умолчанию. Это же происходит в случае объекта класса Box. Пока мы будем пользоваться конструктором, заданным по умолчанию.
Еще раз рассмотрим различие между классом и объектом. Класс создает
новый тип данных, который можно использовать для создания объектов. То
есть класс создает логический каркас, определяющий взаимосвязь между его членами. При объявлении объекта класса мы создаем экземпляр этого класса.
Таким образом, класс — это логическая конструкция. А объект обладает физической сущностью. (То есть объект занимает область в памяти.)