Материал предоставлен https://it.rfei.ru

Массивы

Массив — структура данных, которая описывает упорядоченную коллекцию фиксированного числа однородных элементов. Это значит, что все элементы в массиве имеют одинаковый тип. Позиция в массиве указывается неотрицательным целым значением, называемым индексом. Размер массива фиксирован и не может возрастать для размещения большего количества элементов.

В Java массивы являются объектами. Массивы могут быть примитивных типов или ссылочных типов. В первом случае все элементы массива относятся к определенному примитивному типу. Во втором случае все элементы являются ссылками определенного ссылочного типа. Ссылки в массиве могут указывать на объекты этого типа или его подтипов. Каждый объект-массив имеет неизменяемое (final) поле, называемое length, которое определяет размер массива, т.е. количество элементов, которое массив может содержать. Первый элемент всегда имеет индекс 0, а последний элемент имеет индекс n - 1, где n является значением поля length в массиве.

Простые массивы — это одномерные массивы, т.е. простая последовательность значений. Так как массивы могут хранить ссылки на объекты, то и объекты, на которые они ссылаются, могут также быть объектами-массивами. Это позволяет реализовывать массивы массивов.

Объявление переменных массива

Объявление переменной массива имеет либо следующий синтаксис:

    <тип элемента>[] <имя массива>;

либо следующий:

    <тип элемента> <имя массива>[];

где <тип элемента> может быть примитивным типом или ссылочным типом. Переменная массива <имя массива> имеет тип <тип элемента> [ ]. Обратите внимание, что размер массива не задается. Это значит, что переменной массива <имя массива> может быть присвоен массив любой длины, но его элементы должны иметь тип <тип элемента>.

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

int anIntArray[], oneInteger;
Pizza[] mediumPizzas, largePizzas;

Эти два объявления описывают переменные anIntArray и mediumPizzas, которые являются ссылочными переменными, обозначающими массив значений типа int и массив объектов типа Pizza соответственно. Переменная largePizzas может указывать на массив пицц, а переменная onelnteger не может обозначать массив значений типа int — это просто переменная типа int.

Если обозначение [ ] следует за типом, то все переменные в объявлении являются массивами, в противном случае обозначение [ ] должно следовать за каждым отдельным именем массива в объявлении. Переменная массива, которая объявлена как член класса, не инициализирована и не указывает на массив, будет инициализирована ссылочным значением по умолчанию null. Такая инициализация по умолчанию не применяется к локальным ссылочным переменным и поэтому не применяется к локальным переменным-массивам. Это не следует путать с инициализацией элементов массива во время создания массива.

Создание массива

Массив может быть создан для определенного набора элементов одного типа при помощи оператора new. Результирующая ссылка на массив может быть присвоена переменной массива соответствующего типа.

<имя массива> = new <тип элемента> [<размер массива>];

Минимальное значение <размер массива> равно 0 (т.е. в Java можно создавать пустые массивы). Если размер массива отрицательный, то будет выброшено исключение NegativeArraySizeException.

Если даны следующие объявления массива:

int anIntArray[], oneInteger;
Pizza[] mediumPizzas, largePizzas;

массивы могут быть созданы следующим образом:

anIntArray = new int[10];            // массив из 10 целых
mediumPizzas = new Pizza[5];         // массив из 5 пицц
largePizzas = new Pizza[3];          // массив из 3 пицц

Объявление и создание массива можно объединить.

<тип_элемента1>[] <имя_массива> = new <тип_элемента2>[<размер_массива>];

Однако здесь тип массива <тип элемента2> [ ] должен быть совместим пo присваиванию с типом массива <тип элемента1> [ ]. Когда массив создается, все его элементы инициализируются значениями по умолчанию для типа <тип элемента2>. Это верно при создании как массива-члена класса, так и локальных переменных-массивов.

Во всех примерах выше код создает массив, и элементы массива неявно инициализируются своим значением по умолчанию. Например, элемент с индексом 2 в массиве anIntArray устанавливается в значение 0, а элемент с индексом 3 в массиве mediumPizzas получает значение null, когда массив создается.

int[] anIntArray = new int[10];                  // Значение по умолчанию: 0.

Pizza[] mediumPizzas = new Pizza[5];             // Значение по умолчанию: null.

// Pizza расширяет класс Object

Object objArray = new Pizza[3];                  // Значение по умолчанию: null.

// Pizza реалзует интерфейс Eatable
Eatable[] eatables = new Pizza[2];               // Значение по умолчанию: null.

Значение поля length в каждом массиве берется равным количеству элементов, определенных на этапе создания массива (например, mediumPizzas.length имеет значение 5).

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

Урок 4. Объявления и управление доступомИнициализация и использование массивов