
- •Глава 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. Типы данных, переменные и массивы 65_
Здесь объявлены три локальные переменные — а, b и с. Две первые, а и b, инициализированы константами. Однако с инициализирована динамически длиной гипотенузы (используя теорему Пифагора). Программа использует один из встроенных методов Java sqrt(), который является членом класса Math, чтобы вычислить квадратный корень его аргумента. Ключевой момент заключается в том, что выражение инициализации может использовать любой элемент, допустимый во время инициализации, включая вызовы методов, другие переменные или литералы.
Область действия и время жизни переменных
До сих пор все используемые переменные объявлялись в начале метода main(). Однако Java позволяет объявлять переменные в пределах любого блока. Как было объяснено в главе 2, блок начинается с открывающей фигурной скобки и оканчивается закрывающей фигурной скобкой. Блок определяет область видимости (действия) имен переменных (scope). Таким образом, каждый раз, когда запускается новый блок, создается новая область видимости. Область видимости определяет ту часть программы, где имена декларированных (в данном блоке) объектов являются "видимыми" из других частей программы. Эта область определяет также "время (продолжительность) жизни" этих объектов.
Большинство машинных языков определяет две общих категории областей действия — глобальную и локальную. Однако эти традиционные области действия не совсем согласуются со строгой, объектно-ориентированной моделью Java. Хотя можно показать, что относится к глобальной области действия, но это скорее исключение, а не правило. В Java-программах можно выделить две основных области действия: одна определяется классом, а другая — методом. Однако даже такое различие несколько искусственно. Так как область действия класса (class scope) имеет несколько уникальных свойств и атрибутов, которые не применяются к области действия, определяемой методом, эта дискуссия имеет некоторый смысл. Из-за этих различий обсуждение области действия класса (и переменных, объявленных в ее пределах) отложено до главы 6, где описаны классы. Пока мы будем рассматривать только область действия, определенную в пределах метода.
Область действия, определенная методом, начинается с его открывающей фигурной скобки. Однако, если метод имеет параметры, они также включаются в его область действия. Хотя параметры будут рассмотрены более подробно в главе 5, в данном обсуждении они работают так же, как любая другая переменная метода.
Общее правило: переменные, объявленные внутри области действия, невидимы (т. е. недоступны) коду, который определен вне этой области. Таким образом, когда вы объявляете переменную в пределах области действия, вы локализуете эту переменную и защищаете ее от неправомочного доступа
66
Часть I. Язык Java
и/или модификации. Действительно, правила области видимости обеспечивают основу для инкапсуляции.
Области действия могут быть вложены. Например, каждый раз, когда вы создаете блок кода, образуется новая, вложенная область действия. Когда это происходит, внешняя область действия включает внутреннюю. Это означает, что объекты, объявленные во внешней области, будут видимы и во внутренней. Однако, обратное — не верно. Объекты, объявленные во внутренней области действия, не будут видимы во внешней. Чтобы понять эффект вложенных областей действия, рассмотрим следующую программу:
// Демонстрирует область действия блока, class Scope {
public static void main(String args[]) {
int x; // известна всему коду внутри main
х = 10;
if(x == 10) { // начало новой области действия int у = 20; // известна только в этом блоке
// здесь известны х и у
System.out.println("х и у: " + х + " " + у);
х = у * 2; } // у = 100; //Ошибка! у здесь не известна
//х здесь еще известна System.out.println("х равно " + х); } }
Как указывают комментарии, переменная х объявлена в начале области действия main ( ) и доступна для всего последующего кода в main ( ) . В пределах if-блока объявлена переменная у. Так как блок определяет область действия, переменная у видима только кодам в пределах этого блока. Вот почему закомментирована строка у = 100;, находящаяся вне этого блока. Если вы удалите ведущие символы комментария, произойдет ошибка во время компиляции, потому что у — невидима вне этого блока. Внутри блока if можно использовать переменную х, потому что код в блоке (т. е. во вложенной области действия) имеет доступ к переменным, объявленным во включающей области действия.
Внутри блока переменные можно объявлять в любой точке, но область их действия начинается только после того, как они объявлены. Таким образом, если вы определяете переменную в начале метода, она становится доступной всему коду в пределах этого метода. Наоборот, если вы объявляете перемен-