Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 6. Введение в классы _ 137

Как указано ранее, каждый объект имеет свои собственные копии перемен­ных экземпляра. Это означает, что, если вы имеете два Box-объекта, каждый из них обладает своей собственной копией depth, width и height. Важно по­нять, что изменения экземплярных переменных одного объекта не имеют никакого влияния на экземплярные переменные другого. Например, сле­дующая программа объявляет два Box-объекта:

// Эта программа объявляет два Box-объекта.

class Box {

double width;

double height;

double depth; }

class BoxDemo2 {

public static void main(String args[]) { Box myboxl = new Box(); Box mybox2 = new Box (); double vol;

// присвоить значения экземплярным переменным объекта myboxl myboxl.width = 10; myboxl.height = 20; myboxl. depth = 15;

/* присвоить другие значения экземплярным переменным

объекта mybox2 */ mybox2.width = 3; mybox2.height = 6; mybox2.depth = 9;

/7 вычислить объем первого блока

vol = myboxl.width * myboxl.height * myboxl.depth;

System.out.println("Объем равен " + vol);

// вычислить объем второго блока

vol = mybox2.width * mybox2.height * mybox2.depth;

System.out.println("Объем равен " + vol);

} . '

}

Вывод, выполненный этой программой:

Объем равен 3000.0 Объем равен 162.0

138 Часть I. Язык Java

Можно видеть, что данные myboxl объекта полностью отделены от данных, содержащихся в mybox2.

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

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

В предшествующих примерах программ для объявления объекта типа box использовалась строка вида:

Box mybox = new Box();

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

Box mybox; // объявить ссылку на объект

mybox = new Box О; // распределить память для Box-объекта

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

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

Соседние файлы в папке JavaLit