Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Java .pdf
Скачиваний:
132
Добавлен:
16.03.2015
Размер:
1.32 Mб
Скачать

или инкрементировать значение символьной переменной. В приведенном ниже фрагменте кода мы, располагая базовым символом, прибавляем к нему целое число, чтобы получить символьное представление нужной нам цифры.

Пример 29. Арифметические действия с символьными значениями int three = 3;

char one = '1';

char four = (char) (three + one);

Врезультате выполнения этого кода в переменную four заносится символьное представление нужной нам цифры – '4'. Обратите внимание: тип переменной one в приведенном выше выражении повышается до типа int, так что перед занесением результата в переменную four приходится использовать оператор явного приведения типа.

2.8.6Логический тип

Вязыке Java есть простой тип boolean, используемый для хранения логических значений. Переменные этого типа могут принимать всего два значения – true (истина) и false (ложь). Значения типа boolean возвращаются в качестве результата всеми операторами сравнения, например (а < b). Кроме того, boolean – это тип, требуемый всеми условными инструкциями, такими как if,

while, do.

boolean done = false;

2.9 Массивы

Массивы (arrays) – это упорядоченные наборы элементов одного типа. Элементами массива могут служить значения как простых, так и ссылочных типов. В последнем случае элементами массива будут

77

именно ссылки, в том числе и ссылки на другие массивы: массивы сами по себе являются объектами и наследуют от класса Object.

Объявление

int[] ia = new int[3];

создаёт ссылочную переменную с именем ia типа int[], соответствующего массиву значений типа int, и помещает в неё ссылку на созданный объект массива из трёх элементов типа int.

В объявлении ссылочной переменной типа массива размерность не указывается. В свою очередь количество элементов объекта массива задаётся при его создании посредством оператора new. Длина массива фиксируется в момент создания и в дальнейшем изменению не поддаётся. Впрочем, ссылочной переменной типа массива в любой момент может быть поставлен в соответствие другой массив того же типа с другой размерностью.

Доступ к элементам массива осуществляется по значениям их номеров-индексов. Если длина массива length, то первый элемент массива имеет индекс равный 0, а последний – length-1. Длину массива можно определить с помощью поля length объекта массива (которое неявно снабжено признаками public и final).

Обращение к элементу массива выполняется путём применения к ссылке на массив оператора доступа к элементу массива (квадратных скобок с заключённым в них выражением, результат которого трактуется как индекс в массиве). Чаще всего ссылка на массив задаётся путём указания имени переменной:

ia[10]

Однако ссылка может быть получена и другим образом. Например, если метод toArray() имеет возвращаемый тип Object[] (т.е. ссылка на массив ссылок на произвольные объекты), а index – целочисленная переменная, то возможна следующая конструкция:

toArray()[index + 5]

78

При каждом обращении к элементу массива по индексу исполняющая система Java проверяет, находится ли значение индекса в допустимых пределах, и генерирует исключение типа

ArrayIndexOutOfBoudsException, если результат проверки ложен. Выражение индекса должно относиться к типу int – только этим и ограничивается максимальное количество элементов массива.

Ниже приведён пример кода, в котором в цикле выводится на экран содержимое каждого элемента массива ia:

Пример 29. Вывод элементов массива в консоль for (int i = 0; i < ia.length; i++)

System.out.println(i+ ": " + ia[i]);

Массив нулевой длины (т.е. такой, в котором нет элементов) принято называть пустым. Обратите внимание, что ссылка на массив, равная значению null, и ссылка на пустой массив – это совершенно разные вещи. Пустой массив – это реальный массив, в котором попросту отсутствуют элементы. Пустой массив представляет собой удобную альтернативу значению null при возврате из метода. Если метод способен возвращать null, прикладной код, в котором выполняется обращение к методу, должен сравнить возвращённое значение с null прежде, чем перейти к выполнению оставшихся операций. Если же метод возвращает массив (возможно, пустой), никакие дополнительные проверки не нужны – разумеется, помимо тех, которые касаются длины массива и должны выполняться в любом случае.

Допускается и иная форма объявления ссылок на массивы, в которой квадратныескобки ставятсяпосле идентификатора массива:

int ia[] = new int[3];

Первый вариант синтаксиса считается более предпочтительным, поскольку формально типом переменной является именно int[].

Правила употребления в объявлениях массивов тех или иных модификаторов обычны. Существует единственная особенность,

79

которую важно помнить: модификаторы применяются к ссылочной переменной, а не к массиву как таковому. Если в объявлении указан признак final, это значит только то, что ссылка на массив не может быть изменена, но это никак не запрещает изменять содержимого элементов массива. В Java нельзя указать никакие модификаторы (скажем, final или volatile) для элементов массива.

2.9.1Многомерные массивы

ВJava поддерживается возможность объявления т.н. многомерных массивов (multidimensional arrays), т.е. массивов, элементами которых служат другие массивы. Код, предусматривающий объявление двумерной матрицы и вывод на экран содержимого её элементов, может выглядеть, например, так, как показано в примере 30.

Пример 30. Создание и работа с двумерным массивом float[][] mat = new float[4][4];

for (int y = 0; y < mat.length; y++) {

for (int x = 0; x < mat[y].length; x++) System.out.print(mat[y][x] + " ");

System.out.println();

}

Типом ссылки в приведённом примере является float[][]. С одной стороны, количество пар скобок означает размерность массива. С другой стороны, пара квадратных скобок означает, что ссылка имеет тип массива, а тип его элементов указан слева от квадратных скобок. Т.о. в нашем примере mat – это, чтобы быть точными, одномерный массив, элементы которого имеют тип float[], т.е. являются ссылками на одномерные массивы с элементами типа float. В свою очередь, конструкция mat[y][x] означает взятие элемента с номером x из массива, получаемого в результате вычисления выражения mat[y], т.е. из элемента с номером y массива mat.

80

Соседние файлы в предмете Программирование на Java