Создание массива
Массив создается выражением создания массива или инициализатором массива.
Выражение создания массива определяет тип элемента, число уровней вложенных массивов, и длину массива, по крайней мере одного из уровней вложения. Длина массива доступна как конечный экземпляр переменной length.
Инициализатор массива создает массив и обеспечивает начальные значения для всех компонент.
Доступ к массиву
К компоненту массива обращаются с помощью выражения доступа к массиву которое состоит из выражения, чье значение - ссылка на массив, сопровождаемая индексным выражением, заключенным в скобки [], как в A[i]. Индексация всех массивов начинается с 0. Массив длинойn может быть индексирован целыми от 0 доn-1.
Массивы должны быть индексированы значениями типа int; short, byte, или также в качестве значений индекса могут использоваться значения типа char, потому что они подвергаются одноместному числовому расширению и становятся значениями типа int (т.е. целые). Попытка доступа к компоненте массива с помощью индекса значение у которого типа long вызовет ошибку времени компиляции.
Все обращения к массиву проверяются во время исполнения; попытка использовать индекс, значение которого меньше нуля или больше чем длина массива вызывает генерацию IndexOutOfBoundsException.
Массивы: простой пример
Пример:
class Gauss {
public static void main(String[] args) {
int[] ia = new int[101];
for (int i = 0; i < ia.length; i++)
ia[i] = i;
int sum = 0;
for (int i = 0; i < ia.length; i++)
sum += ia[i];
System.out.println(sum);
}
}
объявляет переменную ia, которая является переменной типа массив из
Инициализаторы массивов
Инициализаторы массивовмогут быть определены в описании, создавая массив и присваивая некоторые начальные значения:
ArrayInitializer:
{ VariableInitializersopt ,opt }
VariableInitializers:
VariableInitializer
VariableInitializers , VariableInitializer
Инициализатор массива пишется как список выражений разделенных запятой, заключенный в фигурные скобки"{" и "}".
Длина построенного массива будет равняться числу выражений.
Каждое выражение определяет значение для одного компонента массива. Каждое выражение должно быть совместимо по присваиванию с типом компонент массива, или происходит ошибка времени компиляции.
Если компонент массива сам является массивом, то выражение определяющее компонент может само быть инициализатором массива; то есть инициализатор массива может быть вложен.
Последние точка с запятой могут появляться после последнего выражения в инициализаторе массива и игнорируется.
Как в примере:
class Test {
public static void main(String[] args) {
int ia[][] = { {1, 2}, null };
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
System.out.println(ia[i][j]);
}
}
до возникновения NullPointerException при попытке индексирования второго компонента массива ia, который равен null.
Члены массива
Члены массива следующее:
public final поле length (длина), которое содержит число компонентов массива (length (длина) может быть только неотрицательной)
public метод clone, который переопределяет метод того же имени в классе Оbject и не генерирует контролируемых исключительных ситуаций.
Все члены, унаследованные от класса Object; только метод из Object не унаследуется clone.
Массив таким образом имеет те же самые методы что и следующий класс
class A implements Cloneable {
public final int length = X;
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError(e.getMessage());
}
}
}
Каждые массив реализуется интерфейсом Cloneable. Эти массивы являются cloneable, как показано в тестирующей программе:
class Test {
public static void main(String[] args) {
int ia1[] = { 1, 2 };
int ia2[] = (int[])ia1.clone();
System.out.print((ia1 == ia2) + " ");
ia1[1]++;
System.out.println(ia2[1]);
}
}
Которая выводит:
false 2
и которая показывает что компоненты массивов, обозначенных через ia1 и ia2, являются различными переменными. (В некоторых ранних реализациях языка Ява этот пример сбивается при компиляции, потому что компилятор неверно полагал, что метод clone для массива может генерировать CloneNotSupportedException.)
Метод сlone многомерного массива создает только одномерный новый массив. Подмассивы оказываются общими, как показано в примере программы :
class Test {
public static void main(String[] args) throws Throwable {
int ia[][] = { { 1 , 2}, null };
int ja[][] = (int[][])ia.clone();
System.out.print((ia == ja) + " ");
System.out.println(ia[0] == ja[0] && ia[1] == ja[1]);
}
}
Который выводит:
false true
и показывает, что массивы типа int[], которыми являются ia[0] и ja[0] - это один и тот же массив.
