Массив объектов в Java

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Массив объектов в Java_vertex

Данная статья:

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего "Самоучителя по Java"

Что такое массив

Ранее на нашем сайте уже была размещена статья, посвященная массивам в Java. В ней мы рассказывали, что массив - это такой "контейнер", который может вмещать в себя несколько однородных переменных.

Массив объектов в Java_vertex

У массивов есть несколько особенностей:

1.  Они могут хранить переменные только одного типа;

2. Размер массива нельзя поменять;

3.  Массив имеет длину;

4. Элементы массивов имеют индексы, по которым к ним и обращаются в случае необходимости;

5. Номер первого элемента массива - 0;

6. Можно создавать пустые массивы, и "положить" в них элементы потом.

А вот что такое "массивы объектов" мы ранее не рассматривали. Давайте разберемся что к чему.

Массив объектов

По сути, у массивов объектов очень много общего с обычными массивами, только у них другая "начинка". Тем не менее, как Вы знаете, объекты гораздо "сложнее", чем переменные, потому что у них есть больше составляющих.

Массив объектов объявляется так же, как и массив переменных:

Как вы видите, у нас не массив разных объектов (стульев, столов и жевательных резинок). Это массив объектов одного класса (массив стульев, например).

Тут тоже все начинается и заканчивается названием класса, а в конце в квадратных скобках указывается размер массива:

Распространенная ошибка

Массив объектов отличается одной особенностью - они состоят из ссылок на объекты:

Массив объектов в Java_vertex

То есть в массиве не содержатся все переменные и методы каждого объекта, как Вы могли бы подумать, а только ссылки на эти самые объекты. Но тут возникает одна опасность. Обычно переменные в массивах имеют значения по умолчанию - если не задать, например, значение переменной int, то она по умолчанию будет равна 0 (больше информации про значения по умолчанию можно найти здесь).

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

Поэтому, в массиве хранится значение по умолчанию null. Если Вы попробуете вызвать метод не созданного объекта, возникнет распространенная ошибка NullPointerException. Обязательно создайте свои объекты перед тем, как обращаться к ним! 😉

Пример

Давайте создадим массив объектов. Допустим, у нас есть класс - ObjMass, и все, что в нем хранится - это массив объектов Cat из 3 элементов:

Ура! Но если класса Cat вы ранее не описывали (ну, не знает Java что такое Cat и откуда она должна вам его взять), тогда название объекта будет выделено красным. Так, в нашем случае, создадим параллельно класс Cat:

Теперь все нормально - только, конечно, Cat совсем не Cat. Зачем нам массив пустых объектов? Для упрощения, давайте у кота будет только кличка:

Вот, класс Cat теперь имеет содержание.

Для того, чтобы показать, что случится если обратиться к объектам, которые еще не были созданы, расширим этот пример. Обратите внимание: перед массивом объектов Cat мы поставили модификатор static (подробнее о нем тут). Давайте добавим метод main:

Теперь, чтобы вывести массив на экран, как всегда, создадим цикл. Обратите внимание - мы выводим не имя кошки (abc[i].name), а объект - abc[i]:

Что Вы увидите на экране?

null

null

null

Это, как мы говорили раньше, значение по умолчанию (пока ничего другого не задали). Именно при ссылке на него возникает NullPointerException - т.е. "исключение - ссылка на null". Эта ошибка возникнет, если мы сошлемся на свойство null-ного объекта - например, давайте выведем на экран имена кошек (abc[i].name):

Что будет? Выдаст от самый NullPointerException.

Чтобы такого не случилось, давайте "заполним" наш массив:

Видим результат выполнения кода:

Kitty

Molly

Lilly

Ура! Теперь Вы знаете основные особенности использования массива объектов в Java. В остальных аспектах, они работают так же как и массивы примитивных типов.


Данная статья написана Vertex Academy. Также Вы можете пройти у нас обучение по Java. Детальнее у нас на сайте.

Массив объектов в Java_vertex

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr