
- •Глава 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
Глава 3. Типы данных, переменные и массивы 71_
byte a = 40; byte b = 50; byte с = 100; int d = а * b / с;
Результат промежуточного выражения а*b превышает диапазон любого из его byte-операндов. Чтобы управлять проблемой этого рода, Java при оценке выражения автоматически расширяет (повышает) тип каждого byte или short операнда до int. Это означает, что подвыражение а*b вычисляется с использованием целых чисел — не байтов. Таким образом, результат 2000 промежуточного выражения 50*40 является законным даже при том, что оба операнда (а и b определены с типом byte.
Не смотря на свою полезность, автоматические расширения типов могут вызывать плохо распознаваемые ошибки во время компиляции. Например, этот, казалось бы, корректный код порождает проблему:
byte b = 50;
b = b * 2; // Ошибка! Невозможно назначить int-значение byte-переменной!
Во второй строке кода происходит попытка сохранить совершенно правильное byte-значение (50*2) в byte-переменной b. Однако, из-за того что операнды были автоматически расширены до типа int (во время оценки выражения), результат также был расширен до int. Таким образом, результат выражения имеет теперь тип int, который не может быть назначен byte-переменной без использования приведения.
Там, где вы осознаете последствия переполнения, следует использовать явное приведение типа:
byte b = 50;
b = (byte) (b * 2) ;
что выдает правильное значение 100.
Правила расширения типов
В дополнение к расширению типов byte и short до int в Java определены несколько правил расширения типов, которые применяются к выражениям. Во-первых, все byte- и short-значения расширяются до int, как только что описано. Затем, если один операнд имеет тип long, тип целого выражения расширяется до long. Если один операнд — типа float, то тип полного выражения расширяется до float. Если тип любого из операндов — double, то тип результата — также double.
Следующая программа демонстрирует, как расширяется каждое значение в выражении, чтобы согласовать второй аргумент с. каждой бинарной операцией:
72 Часть I. Язык Java
class Promote {
public static void main (String args [ ] ) {
byte b = 42; • . .
char с = 'a';
short s = 1024;
int i = 50000;
float I = 5.67f;
double d = .1234;
double result = (f * b) + (i / c) - (d * s) ;
System.out.println((f * b) + " + " + (i / c) + " - " + (d * s));
System.out.println("результат = " + result); } }
Рассмотрим подробнее расширение типов в следующей строке программы:
double result = (f * b) + (i / с) - (d * s) ;
В первом подвыражении (f*b) тип b расширен до float, а результат подвыражения имеет тип float. Далее, в подвыражении а/с) тип с расширен до int, а результат имеет тип int. Затем, в (d*s), значение s расширено до double, и тип подвыражения тоже double. Наконец, просматриваются промежуточные значения типов float, int и double. Результат сложения float-и int-значений имеет тип float. Затем в вычитании float- и double-операндов результат расширяется до double, что и является типом для окончательного результата выражения.
Массивы
Массив — это набор однотипных переменных, на которые ссылаются по общему имени. Массивы можно создавать из элементов любого типа, и они могут иметь одно или несколько измерений. К определенному элементу в массиве обращаются по его индексу (номеру). Массивы предлагают удобные средства группировки связанной информации.
Если вы знакомы с C/C++, будьте внимательны. Массивы в Java работают иначе, чем в этих языках.
Одномерные массивы
Одномерный массив — это, по существу, список однотипных переменных. Чтобы создать массив, сначала следует создать переменную массива (array variable) желательного типа. Общий формат объявления одномерного массива:
type var-name[] ;