
- •Глава 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
Глава 4. Операции 97_
II Беззнаковый сдвиг byte-значения, class ByteUShift {
static public void main(String args [ ]) { char hex[] = {
'0', '!', '2', '3', '4', '5', '6', '7', '8', '91, 'a', 'b', 'c', 'd', 'e1, 'f' };
byte b = (byte) Oxfl; byte с = (byte) (b » 4); byte d = (byte) (b >» 4); byte e = (byte) ((b & Oxff) » 4);
System.out.println(" b = Ox"
+ hex[(b » 4) & OxOf] + hex[b & OxOf]); System.out.println(" b » 4 = Ox"
+ hex[(c » 4) & OxOf] + hex[c & OxOf]); System.out.println(" b >» 4 = Ox"
+ hex[(d » 4) & OxOf] + hex[d & OxOf]);
System.out.println("(b & Oxff) » 4 = Ox"
+ hex[(e » 4) & OxOf] + hex[e & OxOf]); } )
По выводу кажется, будто операция >» ничего не делает, работая с байтовыми операндами. Для этой демонстрации в переменную ь устанавливается произвольное отрицательное byte-значение. Затем с присваивается byte-значение ь, сдвинутое вправо на четыре разряда, что дает Oxff из-за ожидавшегося расширения знака. Затем d присваивается byte-значение ь, сдвинутое без знака вправо на четыре, что, по вашим ожиданиям, должно бы быть OxOf, но фактически есть Oxff из-за расширения знака, которое произошло, когда ь была расширена перед сдвигом до типа int. Последнее выражение устанавливает в е byte-значение ь (типа byte), маскированное до 8 бит (с помощью операции И) и затем сдвинутое вправо на четыре разряда, что и дает ожидаемое значение OxOf. Обратите внимание, что операция беззнакового сдвига вправо для d не использовалась, т. к. состояние знакового разряда после операции И было известно.
b = Oxfl b » 4 = Oxff b >» 4 = Oxff (b & Oxff) » 4 = OxOf
Поразрядная операция присваивания
Все бинарные поразрядные операции имеют форму, которая объединяет присваивание с поразрядной операцией. Например, два следующих опера-
98 Часть I. Язык Java
тора, которые сдвигают значение вправо на четыре разряда, являются эквивалентными:
а = а » 4; а »= 4;
Аналогично, следующие два оператора, которые присваивают переменной а значение поразрядного выражения a or ь, являются эквивалентными:
а = а | Ь; а |= Ь;
Представленная ниже программа создает несколько целых переменных и затем для манипулирования ими использует сокращенную форму присваивания с поразрядными операциями:
class OpBitEquals {
public static void main(String args[]) { int a = 1; int b = 2; int с = 3;
a |= 4; b »= 1;
с «= 1;
a A= c;
System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } }
Вывод этой программы:
a = 3 b = 1 с = 6
Операции отношений
Операции отношений1 (relational operators) определяют отношения, которые один операнд имеет к другому. В частности, они определяют равенство и упорядочивания. В Java используются операции отношений, представленные в табл. 4.4.
1 В отечественной практике часто используется термин операции сравнения. — Примеч. пер.
Глава 4. Операции 99
Таблица 4.4. Операции отношений
Операция Результат Равно != Неравно > Больше чем < Меньше чем >= Больше чем или равно <= Меньше чем или равно |
Результат этих операций — значение типа boolean. Операции отношений часто используются в выражениях, которые управляют условными операторами и различными операторами цикла.
Данные любых Java-типов, включая целые числа, числа с плавающей точкой, символы и булевские переменные, можно сравнивать, используя операции проверки равенства (==) и проверки неравенства (!=). Обратите внимание, что в Java (как в С и C++) равенство обозначается двумя знаками равенства, а не одним. (Напомним, что одиночный знак равенства (=) используется для операции присваивания.) С помощью операций упорядочивания (<, >, <=, >=) можно сравнивать только числовые типы (т. е., чтобы увидеть, какой операнд больше или меньше, чем другой, можно сравнивать только целочисленные, с плавающей точкой и символьные операнды).
Как было сказано ранее, результат, полученный операциями отношений, представляет собой значение типа boolean. Например, следующий кодовый фрагмент содержит совершенно правильные утверждения:
int a = 41; int b = 1; boolean с = а < b;
В этом случае результат выражения а < ь (который есть false) сохраняется в с.
Если вы переходите к Java из среды C/C++, обратите внимание на следующее. В программах C/C++ часто встречаются следующие типы операторов:
int done;
// ...
if(!done) ... // Верно в C/C++
if(done) ... // но не в Java.
100 Часть I. Язык Java
На языке Java эти операторы должны быть записаны так:
if(done == 0)) ... // Это Java-стиль, if(done != 0) ...
Причина в том, что Java не определяет true и false таким же образом, как C/C++. В C/C++ true — любое значение, отличное от нуля, a false — нуль. В Java true и false — нечисловые значения, которые не имеют отношения к нулю или не нулю. Поэтому, чтобы выполнить проверку на равенство нулю, вы должны явно использовать одну или несколько операций отношений.
Операции булевой логики
Представленные в табл. 4.5 операции булевой логики работают только с операндами типа boolean. Чтобы сформировать результат типа boolean, все бинарные логические операции комбинируют два booiean-значения.
Операция Результат & Логическое И (Logical AND) 1 Логическое ИЛИ (Logical OR) А Логическое исключающее ИЛИ (Logical XOR (exclusive OR)) Укороченное ИЛИ (Shirt-ciruit OR) && Укороченное И (Shirt-ciruit AND) ! Логическое унарное отрицание (Logical unary NOT) &= Присваивание с И (AND assignment) 1= Присваивание с ИЛИ (OR assignment) л= Присваивание с исключающим ИЛИ (XOR assignment) Равно (Equal to) != Не равно (Not equal to) ? : Троичная условная операция (Ternary if-then-else) |
Действия операций булевой логики &, | и Л на булевских значениях аналогичны их действиям на битах целых чисел. Например, логическая операция отрицания (!) инвертирует булевское значение на противоположное (itrue дает значение false, a ! false — значение true).
Табл. 4.6 показывает эффект каждой логической операции.