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

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

В приведенном ранее примере программы строка, подобная следующей, используется для объявления объекта типа Box:

Box mybox = new Box() ;

Этот оператор объединяет только что описанные шаги. Чтобы каждый из шагов был более очевидным, его можно было переписать следующим образом:

Box mybox; // объявление ссылки на объект
mybox = new Вох();
// распределение памяти для объекта Box

Первая строка объявляет mybox в качестве ссылки на объект типа Box. После выполнения этой строки переменная mybox содержит значение null, свидетельствующее о том, что она еще не указывает на реальный объект. Любая попытка использования mybox на этом этапе приведет к возникновению ошибки времени компиляции. Следующая строка распределяет память под реальный объект и присваивает переменной mybox ссылку на этот объект. После выполнения второй строки переменную mybox можно использовать, как если бы она была объектом Box. Но в действительности переменная mybox просто содержит адрес памяти реального объекта Box. Эффект выполнения этих двух строк кода показан на рис. 6.1.

На заметку! Читатели, которые знакомы с языками C/C++, вероятно заметили, что ссылки на объекты выглядят подобно указателям. В общих чертах это впечатление верно. Ссылка на объект похожа на указатель памяти. Основное различие между ними — и основное свойство, обеспечивающее безопасность программ Java — в том, что ссылками нельзя манипулировать как настоящими указателями. В частности, ссылка на объект не может указывать на произвольную ячейку памяти, и ею нельзя манипулировать как целочисленным значением.

Объявление объекта типа Box

Рис. 6.1. Объявление объекта типа Box