Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_ООП_2010.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.81 Mб
Скачать

2.2.8Массивы

Фактически, все языки программирования поддерживают массивы. Использование массивов в C и C++ рискованно, поскольку эти массивы всего лишь блоки памяти. Если программа обращается к массиву вне пределов этого блока, или использует память до инициализации (общая ошибка программирования), получится непредсказуемый результат.

Когда создается массив объектов, на самом деле создается массив ссылок, а каждая из этих ссылок автоматически инициализируется специальным значением, имеющим собственное ключевое слово: null. Когда Java видит null, он распознает, что опрашиваемая ссылка не указывает на объект. Необходимо присвоить объект каждой ссылке, прежде чем использовать ее. Таким образом, типичные ошибки при работе с массивами предотвращены в Java.

Также можно создать массив примитивов. Компилятор гарантирует инициализацию, поскольку он заполняет нулями память для этого массива.

Массив – это просто последовательность либо объектов, либо примитивных типов, которые все имеют один тип и упакованы вместе под одним идентификатором. Массивы определяются и используются с квадратными скобками оператора индексирования []. Для определения массива просто указывается имя типа, за которым следуют пустые квадратные скобки:

int[] a1;

Также можно поместить квадратные скобки после идентификатора, что имеет то же самое значение:

int a1[];

Компилятор не позволяет объявить величину массива. Это происходит из-за свойств “ссылок”. Получается только ссылка на массив, и здесь не резервируется место для массива. Для создания хранилища для массива необходимо написать выражение инициализации. Для массивов инициализация может быть выполнена в любом месте кода, но также можно использовать особый вид выражения инициализации, которая должна происходить в точке создания. Эта особая инициализация обеспечивает набор значений, заключенных в фигурные скобки. О резервировании хранилища (эквивалентно использованию new) в этом случае заботится компилятор. Например:

int[] a1 = { 1, 2, 3, 4, 5 };

В Java можно определять ссылку на массив без массива:

int[] a2;

И далее присвоить один массив в Java другому. На самом деле здесь выполняется копирование ссылок.

a2 = a1;

Все массивы имеют внутренний член (не зависимо от того, есть ли массив объектов, или массив примитивных типов), который можно опросить — но не изменить — и он скажет, сколько элементов есть в массиве. Этот член – length.

Массив может быть определен и инициализирован в одной инструкции:

int[] a = new int[20];

Если создается массив не примитивных объектов, необходимо всегда использовать new. Это происходит из-за использования ссылок, так как создается массив ссылок.

// Создание массива не примитивных объектов.

import java.util.*;

public class ArrayClassObj {

public static void main(String[] args) {

Integer[] a = new Integer[20];

for(int i = 0; i < a.length; i++) {

a[i] = new Integer(500);

}

}

}

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

// Инициализация массива.

public class ArrayInit {

public static void main(String[] args) {

Integer[] a = {

new Integer(1),

new Integer(2),

new Integer(3),

};

Integer[] b = new Integer[] {

new Integer(1),

new Integer(2),

new Integer(3),

};

}

}

Java позволяет легко создавать многомерные массивы.

Первый пример показывает многомерный массив примитивных типов. Каждый вектор в массиве ограничивается с помощью фигурных скобок:

int[][] a1 = {

{ 1, 2, 3, },

{ 4, 5, 6, },

};

В следующем примере создается трехмерный массив, резервируемый с помощью new. Здесь весь массив резервируется сразу:

int[][][] a2 = new int[2][2][4];