
- •Глава 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. Типы данных, переменные и массивы 69_
Для расширяющих преобразований числовые типы, включая целый и с плавающей точкой, являются совместимыми друг с другом. Однако числовые типы не совместимы с char или boolean. Типы char и boolean не совместимы также и друг с другом.
Как говорилось ранее, Java выполняет автоматическое преобразование типов также и при сохранении литеральной целочисленной константы в переменных типа byte, short ИЛИ long.
Приведение несовместимых типов
Хотя автоматическое преобразование типов полезно, оно не удовлетворяет всем потребностям. Например, как быть, если вы захотите назначить int-значение byte-переменной? Это преобразование не будет выполнено автоматически, потому что тип byte меньше, чем int. Данный вид преобразования иногда называется сужающим преобразованием (narrowing conversion), т. к. вы явно делаете значение более узким, чтобы оно вписалось в целевой тип.
Чтобы создавать преобразование между двумя несовместимыми типами, вы должны использовать приведение типов. Приведение (cast) — это и есть явное преобразование типов. Оно имеет общий формат:
(target- type) value
Здесь target-type определяет желаемый тип, к которому следует преобразовать указанное value. Например, следующий фрагмент приводит int к byte. Если целое значение больше, чем диапазон byte-типа (256), то оно будет редуцировано по модулю этого диапазона (до остатка от целочисленного деления этого значения на 256).
int a;
byte b;
// .. .
b = (byte) a;
Другой тип преобразований — усечение (trancation), произойдет, когда значение с плавающей точкой назначается целому типу. Как вы знаете, целые числа не имеют дробных частей. Таким образом, когда значение с плавающей точкой назначается целому типу, дробная часть теряется. Например, если значение 1.23 назначается целой переменной, результирующее значение будет просто 1, а 0.23 будет усечено. Конечно, если числовое значение слишком велико, чтобы вписаться в целевой целый тип, то оно будет редуцировано по модулю диапазона целевого типа.
Следующая программа демонстрирует некоторые преобразования типов, которые требуют приведений:
70 Часть I. Язык Java
// Демонстрирует приведения типов, class Conversion {
public static void main(String args[]) {
byte b;
int i = 251;
double d = 323.142;
System.out.println("ХпПриведение int к byte."); b = (byte) i;
System.out.println("i и b " + i + " " + b) ; System.out.println("ХпПриведение double Kint."); i = (int) d;
System.out.println("d и i " + d + " " + i); System.out.println("ХпПриведение double к byte."); b = (byte) d;
System.out.println("d and. b " + d + " " + b); } }
Эта программа генерирует следующий вывод:
Приведение int к byte . i и b 257 1
Приведение double к int . d и i 323.142 323
Приведение double к byte . d и b 323.142 67
Посмотрим на каждое преобразование. Когда значение 257 приводится к byte-переменной, результат — остаток от деления 257 на 256 (диапазон типа byte) в этом случае равен 1. Когда d преобразуется к int, его дробный компонент теряется. Когда d преобразуется к byte, его дробный компонент теряется, и значение редуцируется по модулю 256, что в этом случае дает 67.
Автоматическое расширение типа в выражениях
В дополнение к операции назначения (присваивания) в выражениях есть и другое место, где могут происходить некоторые преобразования типов — в выражениях. Чтобы увидеть, как и почему это происходит, приведем следующие соображения. В выражении точность, требуемая от промежуточного значения, будет иногда превышать диапазон любого операнда. Например, рассмотрим следующие выражения: