
- •Глава 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. Типы данных, переменные и массивы
// Улучшенная версия предыдущей программы, class AutoArray {
public static void main(String args[]) {
int month_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } ; System.out.printIn("Апрель содержит " + month_days[3] + " дней."); } }
Когда вы выполните эту программу, то увидите тот же самый вывод, как у предыдущей версии программы.
Java делает строгие проверки, чтобы удостовериться, что вы случайно не пробуете сохранять или читать значения вне области хранения массива. Исполнительная система Java тоже делает тщательные проверки, чтобы убедиться, что все индексы массивов находятся в правильном диапазоне. (В этом отношении Java существенно отличается от языков C/C++, которые не обеспечивают проверки границ во время выполнения.) Например, исполнительная система будет проверять значение каждого индекса в month_days, чтобы удостовериться, что он находится между 0 и 11 включительно. Если вы попробуете обратиться к элементам вне диапазона массива (индекс меньше нуля или больше, чем длина массива), то вызовете ошибку времени выполнения.
Имеется еще один пример, который использует одномерный массив. Он находит среднее значение набора чисел.
// Среднее значение элементов массива. class Average {
public static void main (String args [ ] ) {
double nums[] = {10.1, 11.2, 12.3, 13.4, 14.5};
double result = 0;
int i ;
for(1=0; i<5; i++)
result = result + nums[i];
System.out.println("Среднее арифметическое равно " + result / 5); }
}
Многомерные массивы
В Java многомерные массивы — это, фактически, массивы массивов. Они выглядят и действуют подобно регулярным многомерным массивам. Однако имеется пара тонких различий. Чтобы объявить многомерную переменную массива, определите каждый дополнительный индекс, используя другой на-
76
Часть I. Язык Java
бор квадратных скобок. Например, следующее утверждение объявляет переменную двумерного массива с именем twoD:
int twoD [ ] [ ] = new int [ 4 ] [ 5 ] ;
Оно распределяет память для массива 4x5 и назначает ее переменной twoD. Внутренне эта матрица реализована как массив массивов целых чисел тип int. Концептуально этот массив будет выглядеть, как показано на рис. 3.1.
Следующая программа нумерует каждый элемент в массиве слева направо, сверху вниз и затем отображает эти значения:
// Демонстрирует двумерный массив . class TwoDArray {
public static void main (String args [ ] ) {
int twoD[] []= new int [4] [5] ;
int i , j , k = 0 ;
for(i=0; i<4; i++)
for(j=0; j<5; j++) { twoD[i] [j] = k; k++; }
for(i=0; i<4; i++) { for(j=0; j<5; j++)
Рис. 3.1. Концептуальный вид двумерного массива 4x5
System.out.print(twoD[i][j] + " "); System.out.println(); } } \
Глава 3. Типы данных, переменные и массивы _ 77_ Эта программа генерирует следующий вывод:
01234
56789
10 11 12 13 14
15 16 17 18 19
Когда вы распределяете память для многомерного массива, нужно специфицировать только первое (крайнее левое) измерение. Остающиеся измерения можно распределять отдельно. Например, в следующем тексте память распределяется только для первого измерения переменной twoD (когда она объявляется). Распределение для второго измерения выполняется вручную:
int twoD [ ] [ ] = new int [ 4 ] [ ] ; twoD[0] = new int [5]; twoD[1] = new int [5] ; twoD[2] = new int [5]; twoD[3] = new int [5] ;
Хотя в этой ситуации нет никакого преимущества для индивидуального распределения массивов второго измерения, но оно может появиться в других случаях. Например, когда вы распределяете измерения вручную, не нужно распределить то же самое число элементов для каждого измерения. Как заявлено ранее, многомерные массивы — фактически массивы массивов, длина каждого массива находится под вашим управлением. Например, следующая программа создает двумерный массив, который для разных строк имеет разное количество столбцов.
// Ручное распределение различных размеров второго измерения. class TwoDAgain { public static void main (String args [] ) (
int twoD[] [] = new int[4][];
twoD[0] = new int[l];
twoD[l] = new int[2];
twoD[2] = new int[3];
twoD[3] = new int[4];
int i, j, k = 0;
for(i=0; i<4; i++)
for(j=0; j<i+l; j++) {
twoD[i] [j] = k;
k++; }
for(1=0; i<4; i++) { for(j=0; j<i+l; j++)
System.out.print(twoD[i][j] + " ");
78 Часть I. Язык Java
System.out.println(); } } }
Эта программа генерирует следующий вывод:
о
12
345 6789
Массив, созданный этой программой, выглядит так, как показано на рис. 3.2.
Использование неровных (или нерегулярных) многомерных массивов не рекомендуется для большинства приложений, потому что они ведут себя противоположно тому, что люди ожидают, когда сталкиваются с многомерным массивом. Однако в некоторых ситуациях их можно использовать эффективно. Например, если вы нуждаетесь в очень большом двухмерном массиве, который редко заполнен (т. е. в котором не все элементы будут содержать ненулевые значения), то нерегулярный массив мог бы быть подходящим решением.
Многомерные массивы возможно инициализировать. Для этого просто включают инициализатор каждого измерения в его собственный набор фигурных скобок. Следующая программа создает матрицу, где каждый элемент содержит произведение индексов строки и столбца. Также обратите внимание, что внутри инициализаторов массива вы можете использовать как выражения, так и литеральные значения.
// Инициализирует двумерный массив, class Matrix {
public static void main(String args[]) { double m[][] = {
{ 0*0, 1*0, 2*0, 3*0 }, { 0*1, 1*1, 2*1, 3*1 }, { 0*2, 1*2, 2*2, 3*2 }, { 0*3, 1*3, 2*3, 3*3 } }; int i, j;