Первая конструкция new создает массив, у которого первый элемент имеет случайную длину, а остальные остаются неопределенными. Вторая конструкция new в цикле for заполняет элементы, но оставляет третий индекс неопределенным вплоть до выполнения третьего new.
Массивы с не-примитивными элементами заполняются аналогичным образом. Пример объединения нескольких выражений new в фигурных скобках:
//• arrays/MultidimensionalObjectArrays java import java.util *;
public class MultidimensionalObjectArrays { public static void main(String[] args) { BerylliumSphere[][] spheres = {
{ new Beryl liumSphereO, new Beryl liumSphereO }. { new Beryl 1 iumSphereO, new Beryl 1 iumSphereO .
new Beryl liumSphereO. new Beryl liumSphereO }, { new Beryl liumSphereO. new Beryl liumSphereO.
new Beryl li umSphereO. new Beryl liumSphereO , new BerylliumSphereO, new Beryl 1iumSphere(). new Beryl liumSphereO. new Beryl liumSphereO }.
}:
System out.printin(Arrays.deepToStri ng(spheres));
}
} /* Output:
[[Sphere 0. Sphere 1]. [Sphere 2, Sphere 3. Sphere 4, Sphere 5]. [Sphere 6. Sphere 7. Sphere 8. Sphere 9. Sphere 10. Sphere 11. Sphere 12. Sphere 13]] *///:-
Массив spheres также является ступенчатым, то есть длины вложенных списков объектов различаются.
Механизм автоматической упаковки работает с инициализаторами массивов:
//• arrays/AutoboxingArrays.java import java util *.
public class AutoboxingArrays {
public static void main(String[] args) {
Integer[][] a = { // Автоматическая упаковка
{ 1, 2. 3. 4, 5, 6. 7. 8, 9, 10 },
{ 21. 22, 23, 24, 25, 26. 27. 28. 29. 30 }. { 51. 52. 53. 54, 55. 56. 57. 58. 59. 60 }. { 71. 72. 73. 74, 75. 76. 77. 78. 79. 80 }.
}.
System.out.pri ntlл(Arrays.deepToStri ng(a));
}
} /* Output-
[[1. 2, 3. 4. 5. 6. 7. 8. 9. 10]. [21. 22. 23. 24. 25. 26. 27. 28. 29. 30]. [51. 52. 53.
54. 55. 56. 57. 58. 59, 60], [71, 72, 73, 74. 75. 76. 77. 78. 79. 80]] *///-
А вот как происходит поэлементное построение массива не-примитивных объектов:
//. arrays/AssemblingMultidimensionalArrays.java // Создание многомерных массивов import java util.*;
public class AssemblingMultidimensionalArrays { public static void main(String[] args) { Integer[][] a. a = new Integer[3][]; for(int i = 0; i < a.length; i++) { a[i] = new Integer[3], for(int j = 0; j < a[i] length; j++)
a[i][j] = i * j; // Автоматическая упаковка
}
System.out println(Arrays.deepToString(a));
}
} /* Output.
[[0, 0, 0]. [0. 1. 2]. [0. 2. 4]] *///:-
Выражение i*j присутствует только для того, чтобы поместить менее тривиальное значение в Integer.
Метод Arrays.deepToString() работает как с массивами примитивных типов, так и с массивами объектов:
//: arrays/MultiDimWrapperArray.java // Multidimensional arrays of "wrapper" objects, import java util *;
public class MultiDimWrapperArray {
public static void main(Str*ing[] args) {
Integer[][] al = { // Автоматическая упаковка { 1. 2. 3. }. { 4. 5. 6, }.
}.
Double[][][] a2 = { // Автоматическая упаковка { { 1.1. 2 2 }. { 3 3. 4.4 } }. { { 5.5, 6.6 }. { 7.7, 8 8}}, { { 9.9, 1 2 }. { 2.3, 3 4}},
}.
string:::: аз = {
{ "The", "Quick", "Sly", "Fox" }, { "Jumped". "Over" }.
{ "The". "Lazy". "Brown", "Dog", "and", "friend" },
System.out.printiл("al: " + Arrays.deepToString(al)): System.out.printiл("a2: " + Arrays.deepToString(a2)): System.out.printin("a3: " + Arrays.deepToString(a3)):
}
} /* Output:
al: [[1. 2. 3], [4. 5. 6]]
a2: [[[1.1. 2.2], [3.3. 4.4]]. [[5.5. 6.6], [7.7. 8.8]]. [[9.9. 1.2]. [2.3. 3.4]]] a3: [[The, Quick. Sly. Fox], [Jumped, Over], [The. Lazy. Brown. Dog. and. friend]] *///:-
И снова в массивах Integer и Double механизм автоматической упаковки Java SE5 создает необходимые объекты-«обертки».
Массивы и параметризация
В общем случае массивы и параметризация плохо сочетаются друг с другом. Например, массивы не могут инициализироваться параметризованными типами:
Peel
Стирание удаляет информацию о параметре типа, а массив должен знать точный тип хранящихся в нем объектов для обеспечения безопасности типов. Впрочем, параметризовать можно сам тип массива:
//: arrays/ParameterizedArrayType.java
class ClassParameter
public T[] f(T[] arg) { return arg: }
}
class MethodParameter {
public static
}
public class ParameterizedArrayType {
public static void main(String[] args) {
Integer[] ints = { 1. 2. 3. 4. 5 }; Double[] doubles = { 1.1. 2.2. 3.3. 4.4'. 5.5 }; Integer[] ints2 =
new CIassParameter
new ClassParameter
}
} ///:-