
- •Глава 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. Введение в классы 151
class Box { double width; double height; double depth;
// Это конструктор класса Box.
Box(double w, double h, double d) {
width = w;
height = h;
depth = d; }
// вычислить и возвратить объем double volume() {
return width * height * depth; } }
class BoxDemo? {
public static void main(String args[]) {
/'/ объявить, распределить и инициализировать Box-объекты Box myboxl = new Box(10, 20, 15); Box mybox2 = new Box(3, 6, 9);
double vol.;
// получить объем первого блока
vol = myboxl.volume{);
System.out.println("Объем равен " + vol);
// получить объем второго блока vol = mybox2.volume();
System.out.println("Объем равен " + vol); } }
Вывод этой программы:
Объем равен 3000.0 Объем равен 162.0
Не трудно обнаружить, что каждый объект инициализирован так, как определено в параметрах его конструктора. Например, в следующей строке
Box myboxl = new Box(10, 20, 15);
значения 10, 20 и 15 передаются конструктору box о, когда new создает объект. Таким образом, копии переменных width, height и depth объекта myboxl будут содержать значения 10, 20 и 15, соответственно.
/52 Часть I. Язык Java
Ключевое слово this
Иногда у метода возникает необходимость обращаться к объекту, который его вызвал. Для этого Java определяет ключевое слово this. Его можно использовать внутри любого метода, чтобы сослаться на текущий объект. То есть this — это всегда ссылка на объект, метод которого был вызван. Вы можете использовать this везде, где разрешается ссылка на объект текущего класса.
Чтобы лучше понять, на что ссылается this, рассмотрим следующую версию box():
// Избыточное использование this. Box(double w, double h, double d) {
this.width = w;
this.height = h;
this.depth = d; }
Эта версия box () работает точно так же, как и более ранняя. Использование this избыточно, но совершенно корректно. Внутри box () this будет всегда ссылаться на вызывающий объект. Хотя и избыточный в данном случае, this полезен в других контекстах, один из которых объясняется в следующем разделе.
Скрытие переменной экземпляра
Как известно, в Java недопустимо объявление двух локальных переменных с одним и тем же именем внутри той же самой или включающей области действия идентификаторов. Заметим, что вы можете иметь локальные переменные, включая формальные параметры для методов, которые перекрываются с именами экземплярных переменных класса. Однако, когда локальная переменная имеет такое же имя, как переменная экземпляра, локальная переменная скрывает переменную экземпляра. Вот почему width, height и depth не использовались как имена параметров конструктора box () внутри класса box. Если бы они были использованы для именования этих параметров, то, скажем width, как формальный параметр, скрыл бы переменную экземпляра width. Хотя обычно проще указывать различные имена, существует другой способ обойти эту ситуацию. Поскольку this позволяет обращаться прямо к объекту, это можно применять для разрешения любых конфликтов пространства имен, которые могли бы происходить между экземп-лярными и локальными переменными. Ниже представлена другая версия box (), которая использует width, height и depth для имен параметров и затем применяет this, чтобы получить доступ к переменным экземпляра с теми же самыми именами:
Глава в. Введение в классы —3
// Используйте этот вариант конструктора
// для разрешения конфликтов пространства имен.
Box(double width, double height, double depth) (
this.width = width;
this.height = height;
this.depth = depth; }
Использование this в указанном контексте иногда может привести к путанице, так что некоторые программисты предпочитают не применять имена локальных переменных и формальных параметров, которые совпадают с переменными экземпляра. Конечно, другие программисты, наоборот, верят, что это хорошее соглашение — использовать одинаковые имена — для ясности, и this — чтобы преодолеть скрытие переменной экземпляра. Какой подход принимаете вы — это вопрос вкуса.
Хотя в только что показанных примерах this не имеет никакого существенного значения, в некоторых ситуациях он очень полезен.
Сборка"мусора"
Так как объекты распределяются динамически с помощью операции new, можно задать вопрос, как такие объекты ликвидируются и их память освобождается для более позднего перераспределения. В некоторых языках, таких как C++, от динамически распределенных объектов нужно освобождаться вручную — при помощи оператора delete. Java использует другой подход: он выполняет освобождение памяти от объекта автоматически. Методика, которая реализует эту процедуру, называется сборкой "мусора". Она работает примерно так: когда никаких ссылок на объект не существует, предполагается, что этот объект больше не нужен, и память, занятая объектом, может быть освобождена. Нет никакой явной потребности уничтожать объекты как в C++. Сборка "мусора" происходит не регулярно (если вообще происходит) во время выполнения программы. Она не будет происходить просто потому, что существует один или более объектов, которые уже не используются. Кроме того, различные реализации исполняющей системы Java имеют разные подходы к сборке "мусора", но вам, по большей части, не придется думать об этом при записи своих программ.
Метод finalizeO
Иногда объекту нужно выполнять некоторые действия, когда он разрушается. Например, если объект содержит некоторый не-Java ресурс, такой как дескриптор файла или оконный шрифт, то нужно удостовериться, что до