Главная страница

Лабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74


Скачать 1.76 Mb.
НазваниеЛабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74
Дата12.03.2021
Размер1.76 Mb.
Формат файлаdoc
Имя файлаOOP_Lab_Rus.doc
ТипЛабораторная работа
#184105
страница7 из 31
1   2   3   4   5   6   7   8   9   10   ...   31

4.4 Объявление объектов


Когда вы создаете класс, вы создаете новый тип данных. Этот тип можно использовать для объявления соответствующих объектов. Однако получение объектов класса это двухшаговый процесс. Во-первых, нужно объявить переменную типа «класс». Она не определяет объект. Это просто переменная, которая может ссылаться на объект. Во-вторых, вы должны получить актуальную, физическую копию объекта и назначать ее этой переменной. Вы можете сделать это с помощью операции new. Операция new распределяет динамически (т.е. во время выполнения) память для объекта и возвращает ссылку на нее. Данная ссылка является адресом ячейки памяти, выделенной объекту вышеуказанной операцией. Затем эта ссылка сохраняется в переменной. Таким образом, в Java все объекты класса должны быть распределены динамически. Рассмотрим подробности данной процедуры.

Для объявления объекта типа Box использовалась строка вида:
Box mybox = new Box();
Этот оператор комбинирует два шага, как было только что описано. Чтобы продемонстрировать каждый шаг, его можно переписать так:
Box mybox; // объявить ссылку на объект

mybox = new Box(); // распределить память для Вох-объекта
Первая строка объявляет mybox как ссылку на объект типа Box. После того как эта строка выполняется, mybox содержит значение null, которое означает, что переменная еще не указывает на фактический объект. Любая попытка использовать mybox в этой точке приведет к ошибке во время компиляции. Следующая строка распределяет фактический объект и назначает ссылку на него переменной mybox. После того, как вторая строка выполняется, вы можете использовать mybox, как если бы это был объект Box. Но в действительности mybox просто содержит адрес ячейки памяти фактического объекта Box. Действие этих двух строк программы изображено на рис. 1.



Рисунок 1. Объявление объекта типа Box.
Замечание.

В C/C++ объектные ссылки кажутся похожими на указатели. Это подозрение, по существу, верно. Объектная ссылка подобна указателю памяти. Главное различие (и ключ к безопасности Java) заключается в том, что в Java запрещено манипулировать ссылками как с указателями. Нельзя, например, заставить объектную ссылку указать на произвольное место в памяти или манипулировать ею как целым числом.

4.4.1 Операция new


Операция new динамически распределяет память для объекта. Она имеет следующую общую форму:
class-var = new classname();
Здесь class-var – переменная типа «класс», которая создается; classname – имя класса, экземпляр которого создается. За именем класса следуют круглые скобки, устанавливающие конструктор класса. Конструктор (constructor) определяет, что происходит, когда объект класса создается. Большинство классов явно определяют свои собственные конструкторы (внутри своих определений). Однако если явный конструктор не определен, то Java автоматически обеспечит так называемый «конструктор по умолчанию» (default constructor) или умалчиваемый конструктор. Именно так обстоит дело с классом Box.

Заметим, что не нужно использовать операцию new для таких типов данных, как целые числа или символы. Ответ заключается в том, что простые типы Java не реализованы как объекты. Они реализованы как «нормальные» переменные. Это сделано в интересах эффективности. Объекты имеют много свойств и атрибутов, которые требуют, чтобы Java обращалась с ними иначе, чем с простыми типами. Не применяя к простым типам тот же подход, который используется с объектами, Java может реализовывать простые типы более эффективно.

Оператор new распределяет память для объекта во время выполнения, поэтому программа может создавать столько объектов, сколько требуется в течение ее выполнения. Если операция new не будет способна распределить память для объекта, т.к. отсутствует необходимое количество свободной памяти, то возникнет исключительная ситуация при работе программы.

Класс создает новый тип данных, который может использоваться для создания объектов. То есть класс создает логическую структуру, которая определяет отношения между его членами. Когда вы объявляете объект класса, вы создаете экземпляр (образец) этого класса. Таким образом, класс – это логическая конструкция, а объект – физическая реальность (т.е. область памяти с конкретными данными). Важно постоянно помнить об этом различии.
1   2   3   4   5   6   7   8   9   10   ...   31


написать администратору сайта