
- •Глава 2
- •Глава 2. Обзор языка Java 31_
- •Глава 2. Обзор языка Java
- •Глава 2. Обзор языка Java 37
- •Глава 2. Обзор языка Java 39
- •Глава 2. Обзор языка Java 41
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 43_
- •Глава 2. Обзор языка Java 45_
- •Глава 2. Обзор языка Java 47
- •Глава 2. Обзор языка Java 49_
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 57
- •Глава 3
- •Глава 3. Типы данных, переменные и массивы 53
- •Глава 3. Типы данных, переменные и массивы _ 55
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 59_
- •Глава 3. Типы данных, переменные и массивы 61_
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 65_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 67_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 69_
- •Глава 3. Типы данных, переменные и массивы 71_
- •Глава 3. Типы данных, переменные и массивы 73_
- •Глава 3. Типы данных, переменные и массивы
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы _ 77_ Эта программа генерирует следующий вывод:
- •Глава 3. Типы данных, переменные и массивы 79
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 81_
- •Глава 4
- •Глава 4. Операции 83
- •84 Часть I. Язык Java
- •Глава 4. Операции 85_
- •Глава 4. Операции 87_
- •88_ Часть I. Язык Java
- •Глава 4. Операции 89
- •Глава 4. Операции 91_
- •Глава 4. Операции 93_
- •Глава 4. Операции 95_
- •Глава 4. Операции 97_
- •Глава 4. Операции 99
- •Глава 4. Операции 101
- •Глава 4. Операции 103
- •104 Часть I, Язык Java
- •Глава 4. Операции 105
- •Глава 5
- •Глава 5, Управляющие операторы 107
- •Глава 5. Управляющие операторы 109
- •110 Часть I. Язык Java
- •Глава 5, Управляющие операторы 111
- •Глава 5. Управляющие операторы 113
- •Глава 5. Управляющие операторы
- •Глава 5. Управляющие операторы 117
- •118 Часть I. Язык Java
- •Глава 5. Управляющие операторы 119
- •Глава 5. Управляющие операторы 121
- •122 Часть I. Язык Java
- •Глава 5. Управляющие операторы 123
- •Глава 5. Управляющие операторы 125
- •Глава 5. Управляющие операторы 127
- •Глава 5. Управляющие операторы 129
- •Глава 5. Управляющие операторы
- •Глава 6
- •134 Часть I. Язык Java
- •Глава 6. Введение в классы 135
- •136 Часть I. Язык Java
- •Глава 6. Введение в классы _ 137
- •Глава 6. Введение в классы 139
- •Глава 6. Введение в классы
- •Глава 6. Введение в классы 143
- •Глава 6. Введение в классы 145
- •Глава 6. Введение в классы 147
- •Глава 6. Введение в классы 149
- •Глава 6. Введение в классы 151
- •154 Часть I. Язык Java
- •Глава 6. Введение в классы 155
- •Глава 6. Введение в классы 157
- •Глава 7
- •Глава 7. Методы и классы 159
- •Глава 7. Методы и классы . 161
- •Глава 7. Методы и классы • 163
- •164 Часть I. Язык Java
- •Глава 7. Методы и классы 165
- •Глава 7. Методы и классы 167
- •Глава 7. Методы и классы 169
- •Глава 7, Методы и классы 171-
- •Глава 7. Методы и классы 173
- •Глава 7. Методы и классы 775
- •Глава 7. Методы и классы 177
- •Глава 7. Методы и классы ' 179
- •Глава 7. Методы и классы 1_81_
- •Глава 7. Методы и классы 1_83
- •184 '• Часть I. Язык Java
- •Глава 7. Методы и классы . 185
- •Глава 7. Методы и классы 187
- •Глава 8
- •Глава 8. Наследование 191
- •Глава 8. Наследование 193
- •Глава 8, Наследование 195
- •Глава 8. Наследование 197
- •198 Часть I. Язык Java
- •Глава 8, Наследование 199
- •Глава 8. Наследование 201
- •202 Часть I. Язык Java
- •Глава 8. Наследование 203
- •Глава 8. Наследование 205
- •Глава 8. Наследование 207
- •Глава 8. Наследование 209
- •Глава 8. Наследование 211
- •Глава 8. Наследование 213
- •Глава 8. Наследование 215
- •Глава 8. Наследование 217
- •Глава 12
- •Глава 12. Ввод/вывод, апплеты и другие темы 303_
- •Глава 12. Ввод/вывод, апплеты и другие темы . 305
- •Глава 12. Ввод/вывод, алплеты и другие темы 307
- •Глава 12. Ввод/вывод, апплеты и другие темы 309
- •Глава 12. Ввод/вывод, апплеты и другие темы 311
- •Глава 12. Ввод/вывод, апплаты и другие темы 313
- •314 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 315
- •Глава 12. Ввод/вывод, апплеты и другие темы 317
- •Глава 12. Ввод/вывод, апплеты и другие темы 319
- •320 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 321
- •Глава 12. Ввод/вывод, апплеты и другие темы 323
- •324 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 325
- •326 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплегы и другие темы 327
Глава 6. Введение в классы 139
Операция new
Как только что было указано, операция new динамически распределяет па-мятъ для объекта. Он имеет следующую общую форму:
class-vaf = new classname();
Здесь ciass-var — переменная типа "класс", которая создается; ciassname — имя класса, экземпляр которого создается. За именем класса следуют круглые скобки, устанавливающие конструктор класса. Конструктор (constructor) определяет, что происходит, когда объект класса создается. Это важная часть всех классов. Конструкторы имеют много существенных атрибутов. Большинство классов явно определяют свои собственные конструкторы (внутри своих определений). Однако если явный конструктор не определен, то Java автоматически обеспечит так называемый "конструктор по умолчанию" (default constructor) или умалчиваемый конструктор. Именно так обстоит дело с классом box. Пока мы будем использовать конструктор по умолчанию, но скоро вы увидите, как можно определять ваши собственные конструкторы.
Сейчас вы могли бы задаться вопросом, почему не нужно использовать операцию new для таких типов данных, как целые числа или символы. Ответ заключается в том, что простые типы Java не реализованы как объекты. Они реашзованы как "нормальные" переменные. Это сделано в интересах эффективности. Объекты имеют много свойств и атрибутов, которые требуют, чтобы Java обращалась с ними иначе, чем с простыми типами. Не применяя к простым типам тот же подход, который используется с объектами, Java может реализовывать простые типы более эффективно. Позже вы увидите
140 Часть I. Язык Java
объектные версии простых типов, с которыми можно работать в тех ситуациях, когда необходимы законченные объекты этих типов.
Важно понять, что new распределяет память для объекта во время выполнения. Преимущество данного подхода состоит в том, что ваша программа может создавать столько объектов, сколько требуется в течение ее выполнения. Однако, возможно, что операция new не будет способна распределить память для объекта, потому что существует недостаток памяти, т. к. она конечна. Если это происходит, возникнет исключительная ситуация при работе программы. (Возможности обработки этих и других исключений вы изучите в главе 10.) Для примеров, предложенных в данной книге, вы не должны беспокоиться относительно нехватки памяти, но нужно обязательно помнить о такой ситуации при написании реальных программ.
Давайте еще раз рассмотрим различия между классом и объектом. Класс создает новый тип данных, который может использоваться для создания объектов. То есть класс создает логическую структуру, которая определяет отношения между его членами. Когда вы объявляете объект класса, вы создаете экземпляр (образец) этого класса. Таким образом, класс — это логическая конструкция, а объект — физическая реальность (т. е. объект занимает место в памяти). Важно постоянно помнить об этом различии.
Назначение
ссылочных переменных объекта
Во время выполнения операции назначения (присваивания) ссылочные переменные объекта (object reference variables) действуют иначе, чем можно было бы ожидать. Например, как вы думаете, что делает следующий фрагмент?
Box Ы = new Box(); Box Ь2 = Ы
Вы могли бы предположить, что переменной Ь2 назначается ссылка на копию объекта, на который ссылается ы. То есть вы могли бы подумать, что ы и Ь2 обращаются к отдельным и различным объектам. Однако это было бы неправильно. На самом деле после того, как этот фрагмент выполнится, обе переменных (ы и Ь2) будут ссылаться на один и тот же объект. Назначение ы переменной Ь2 не распределяет никакой памяти и не копирует какую-либо часть первоначального объекта. Эта операция просто помещает в Ь2 ссылку из ы. Таким образом, любые изменения, сделанные в объекте через Ь2 затронут объект, на который ссылается ы, т. к. это один и тот же объект. Данная ситуация изображена на рис. 6.2.
Хотя ы и Ь2, обе ссылаются на тот же самый объект, они не связаны каким-то другим способом. Например, следующее назначение на ы просто отключит ы от исходного объекта без воздействия на объект или переменную Ь2: