
- •Глава 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. Типы данных, переменные и массивы 67_
ную в конце блока, это совершенно бесполезно, потому что никакой код не будет иметь к ней доступа. Например, этот фрагмент недопустим, потому что переменная count не может использоваться до ее объявления:
// Этот фрагмент неправильный!
count =100; // count нельзя использовать перед ее объявлением!
int count;
Напомним другой важный момент: при выполнении программы переменные создаются во время входа в их область действия и разрушаются при выходе из этой области. Это означает, что переменная не будет сохранять свое значение при выходе из области действия. Поэтому переменные, объявленные внутри метода, не будут сохранять своих значений между вызовами этого метода. Аналогично, переменная, объявленная в блоке, будет терять свое значение при выходе из него. Таким образом, время жизни переменной ограничено ее областью действия.
Если объявление переменной включает инициализатор, то эта переменная будет повторно инициализироваться каждый раз при входе в блок, в котором она объявлена. Например, рассмотрим программу:
// Демонстрирует время жизни переменной, class LifeTime {
public static void main(String args[]) { int x;
for(x = 0; x < 3; x++) {
int у = -1; //У инициализируется каждый раз при входе в блок System.out.println("у равен: " + у); /'/ всегда выводит -1 у = 100;
System.out.println("у теперь: " + у); } } }
Вывод, генерируемый этой программой:
у равен: -1 у теперь: 100 у равен: -1 у теперь: 100 у равен: -1 у теперь: 100
Видно, что у повторно инициализируется (значением - 1) каждый раз при входе во внутренний цикл for. Даже хотя ей затем присваивается значение 100, это значение теряется.
Часть I. Язык Java
Последний штрих: хотя блоки могут быть вложены, во внутреннем блоке нельзя объявлять переменную с тамим же именем, как во внешней области действия. В этом отношении Java отличается от С и C++. Ниже приведен пример, который пробует объявлять две отдельные переменные с одним и тем же именем. В Java это незаконно. В C/C++ это было бы приемлемо, и две переменные bar были бы различными.
// Эта программа не будет компилироваться, class ScopeErr {
public static void main(String argsf]) { int bar = 1; { // создается новая область действия
int bar = 2; // Ошибка времени выполнения — bar уже определена! } } }
Преобразование и приведение типов
Опытным программистам уже известно, что довольно обычным делом является присваивание значения одного типа переменной другого типа. Если два типа совместимы, то Java выполнит преобразование автоматически. Например, всегда возможно назначить int-значение long-переменной. Однако не все типы совместимы и, таким образом, не все преобразования типов неявно позволены. Например, не определено никакого преобразования из double в byte. К счастью, все еще возможно осуществить преобразование между несовместимыми типами. Чтобы это сделать, следует использовать специальную операцию приведения типов (cast), которая выполняет явное преобразование между несовместимыми типами. Рассмотрим как автоматические преобразования типов, так и приведение типов.
Автоматическое преобразование типов в Java
Когда один тип данных назначается переменной другого типа, будет иметь место автоматическое преобразование типов, если выполняются два следующих условия:
O два типа совместимы;
О целевой тип больше чем исходный.
Когда эти два условия выполняются, имеет место расширяющее преобразование (widening conversion). Например, тип int всегда достаточно большой, чтобы содержать все допустимые byte-значения, так что никакой явный оператор приведения не требуется.