Философия Java


Инициализация массива - часть 3


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

int[] a = new int[pRand(20)];

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

//: c04:ArrayClassObj.java

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

import java.util.*;

public class ArrayClassObj { static Random rand = new Random(); static int pRand(int mod) { return Math.abs(rand.nextInt()) % mod + 1; } public static void main(String[] args) { Integer[] a = new Integer[pRand(20)]; System.out.println( "length of a = " + a.length); for(int i = 0; i < a.length; i++) { a[i] = new Integer(pRand(500)); System.out.println( "a[" + i + "] = " + a[i]); } } } ///:~

Здесь, даже после вызова new для создания массива:

Integer[] a = new Integer[pRand(20)];

есть только массив ссылок, и пока ссылки не будут инициализированы путем создания новых объектов Integer, инициализация будет не закончена:

a[i] = new Integer(pRand(500));

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

Взгляните на формирование объекта String внутри инструкции печати. Вы увидите, что ссылка на объект Integer автоматически конвертируется, для производства String, представляющую значение внутри объекта.

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

//: c04:ArrayInit.java

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

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), }; } } ///:~

Иногда это полезно, но это более ограниченный способ, так как размер массива определяется во время компиляции. Последняя запятая в списке инициализации не обязательна. (Эта особенность облегчает обслуживание длинных списков.)




Начало  Назад  Вперед