Get Adobe Flash player

В Java есть как одномерные, так и многомерные массивы.
Массив в Java это объект. Этот объект состоит из размера массива (поле length) и собственно массива.

Простейшие одномерные массивы базовых типов.
int mymasiv[]; или
int[]mymasiv;

mymasiv — ссылки на массив. Как и любой другой объект массив должен быть создан операцией new.
mymasiv = new int[10];
В Java допустимо объединять описание и инициализацию.
int[]mymasiv = new int[10];
Для массивов допустима инициализация списком значений.
int mymasiv [] = {1, 2, 3, 4};
Здесь описан массив из 4-х элементов и сразу определены их начальные значения.
Элементы массивов в Java нумеруются с 0.

Java жестко контролирует выход за пределы массива. При попытке обратиться к несуществующему элементу массива возникает IndexOutOfBoundException.
Для двумерных массивов ставится не одна пара скобок, а две, для трехмерных — три и т.д. Например.

s = mymasiv [i][0];
ymasiv [i][j][k] = 10;

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

public double sum(double mymasiv []) {
double s = 0;
for ( int i = 0; i < mymasiv.length; i++ ) {
s += mymasiv [i];
}
return s;
}

Массивы объектов
Одномерный массив объектов — это массив ссылок на объекты. Соответственно, нужно создать как массив, так и сами объекты.
Пусть у нас есть некоторый класс ArMassiv и нужно построить массив из 4-x объектов этого класса.

class ArrayM{
//объекты внутри массива/ нужно создать classa ArMassiv
//Первый вариант явное создание
ArMassiv objPets[] = new ArMassiv[4];{
for (int j = 0; j < 4; j++ )
objPets[j] = new ArMassiv();
}

// Второй вариант создание массива c использованиеv списка инициализации
ArMassiv pets[] = new ArMassiv[4];{ //объявляем и создаем массив для хранения ссылок classa Massiv
pets[0]= new ArMassiv();
} //конец

Многомерные массивы
Они строятся по принципу «массив массивов». Разберемся с этим. Массив вляется объектом. Двумерный массив — это массив ссылок на объекты-массивы. Трехмерный массив — это массив ссылок на массивы, которые, в свою очередь, являются массивами ссылок на массивы.
Это выглядит несколько сложно. Но, к счастью, есть сокращенные варианты создания массива, которые позволяют сразу разместить все необходимые массивы ссылок. Кроме того, если удается использовать списки инициализации (а это возможно, когда размер массива заранее известен), то все гораздо проще. Пусть, например, требуется создать массив целых 3*3.
Вариант 1. (явное создание)
int ary[][] = new int[3][3];
Вариант 2. (использование списка инициализации)
int ary[][] = new int[][] {
{1, 1, 1},
{2, 2, 2},
{1, 2, 3},
};

• Внимание: в варианте 1 массив создан, но его элементы имеют неопределенное значение. Если попытаться их использовать, возникнет Exception.
Соответственно, все несколько усложняется при использовании массивов объектов. Создадим аналогичный массив объектов класса SomeClass.
Вариант 1. (явное создание)
SomeClass ary[][] = new SomeClass[3][3];
for ( int k = 0; k < 3; k++ )
for ( int j = 0; j < 3; j++ )
ary[k][j] = new SomeClass();

Вариант 2. (использование списка инициализации)
SomeClass ary[][] = new SomeClass[][] {
{ new SomeClass(), new SomeClass(), new SomeClass(), },
{ new SomeClass(), new SomeClass(), new SomeClass(), },
{ new SomeClass(), new SomeClass(), new SomeClass(), },
};

Глядя на примеры со списком инициализации, можно задаться вопросом, что будет, если мы в одних строках зададим одно количество элементов, а в других — другое. Например.
int ary[][] = new int[][] {
{1, 1, 1, 1},
{2, 2, 2},
{1, 2, 3, 4, 5},
};

В Java такое допустимо и именно потому, что многомерный массив является массивом ссылок на массивы. Т.е. каждый массив следующего уровня является самостоятельным массивом и может иметь свой размер. Причем, создание таких «непрямоугольных» массивов возможно не только с использованием списка инициализации, но и явно.
int ary[][] = new int[3][];
ary[0] = new int[5];
ary[1] = new int[2];
ary[2] = new int[6];

• Увлекаться такими «непрямоугольными» массивами не стоит. На практике очень редко встречаются задачи, в которых подобные возможности могут потребоваться. Но знать о них нужно. Хотя бы для того, чтобы понять смысл ошибки, возникшей в результате непреднамеренного создания подобного массива.
Присваивание и копирование
В приведенных выше примерах имя массива — это переменная-ссылка (или поле-ссылка), содержащая адрес объекта массива. Поэтому присваивание таких переменных друг другу — это не копирование массивов, а копирование ссылок на объекты. Например.
int ary[][] = new int[][] {
{1, 1, 1, 1},
{2, 2, 2},
{1, 2, 3, 4, 5},
};

int copyAry[][] = ary;

В данном примере все абсолютно корректно, но copyAry — это не ссылка на копию массива, а еще одна ссылка на тот же массив. Для создания копии придется написать соответствующий метод.
В состав стандартной библиотеки Java входят разнообразные средства работы с массивами. В пакете java.util имеется класс Arrays, который обеспечивает множество полезных операций над массивами (см. документацию).
Резюмируем основные правила
• 1. Массивы являются объектами специфической формы. В частности, любой массив имеет поле length, которое определяет его размер.
• 2. Массивы индексируются от 0.
• 3. Java жестко контролирует выход за границы массива (прерывание IndexOutOfBoundException).
• 4. Массив элементарного типа, например int, — это действительно массив значений (т.е. массив целых чисел). Массив объектов — это массив ссылок на объекты. Т.е. недостаточно создать сам массив, нужно еще создать объекты, входящие в него.
• 5. Существуют два способа создания массива — операцией new и явной инициализацией.
• 6. Для многомерных массивов существует возможность задания разного размера массивов второго, третьего и т.д. измерений, но это «экзотика».