Массив объектов в Java. Как добавить объект в массив Java?
Мы уже рассказывали про массивы в Java. В этой статье поговорим про массив объектов и о том, как добавить объект в массив Java.
Массивы имеют следующие особенности: 1. Хранят переменные лишь одного типа. 2. Имеют определённую длину. 3. Размер массива поменять нельзя. 4. Элементы массива имеют индексы, позволяющие обратиться к этим элементам в случае надобности. 5. Номер 1-го элемента массива — это 0, а не 1; 6. Всегда можно создать пустой массив, а поместить в него элементы можно и потом.
Впрочем, всё это вы уже знаете из предыдущей статьи. Но что такое массив объектов, мы не рассматривали. Впрочем, сейчас мы этот пробел устраним.
Массивы объектов в Java
Массив объектов похож на обычный массив, но имеет другую «начинку». Это связано с тем, что объекты сложнее переменных, т. к. имеют больше составляющих. Но объявление массива объектов происходит так же:
Как видите, мы создаём не массив разных объектов, а массив объектов одного класса. И в начале, и в конце мы указываем название класса, а в квадратных скобках в конце — размер массива.
Какие ошибки делают чаще всего?
У массива объектов есть важная особенность — он включает в себя не объекты сами по себе со всеми их методами и переменными, а лишь ссылки на объекты.
И вот это может стать причиной ошибок. Смотрите, если, к примеру, у нас в массиве есть переменная int и мы не задали её значение, то она по умолчанию станет равна 0. Когда речь идёт про массив объектов — всё иначе. В таком массиве, как уже было сказано, хранятся ссылки на объекты, но пока объект не существует, ссылки тоже не могут существовать. Именно поэтому в массиве объектов по умолчанию хранится значение null. И если вы попытаетесь вызвать метод объекта, который не создан/не существует, получите распространённую ошибку NullPointerException. Это значит, что перед тем, как обращаться к объектам, их обязательно нужно сначала создать, то есть добавить объект в массив Java.
Перейдём к практике
Приступим к созданию массива объектов. Представьте, что у нас есть класс ObjMass и всё, что в нём есть, — это массив объектов Dog из трёх элементов:
public class ObjMass { Dog[] name = new Dog [3]; }
Прекрасно. Но так как класс Dog мы раньше не описывали (интерпретатор Java знать не знает, что такое Dog и откуда его взять), то название объекта выделится красным. Исправим это, создав параллельно класс Dog:
class ObjMass { Dog[] abc = new Dog [3]; } class Dog{ }
Так, хорошо. Но зачем нам массив, состоящий из пустых объектов? Пусть у собак будут хотя бы клички:
class ObjMass { Dog[] abc = new Dog [3]; } class Dog{ String name; public Dog (String name){ this.name = name; } }
Вот, теперь Dog имеет содержание.
Давайте сейчас обратимся к объектам, которые ещё не созданы, как говорится, расширим пример. Обратите ваше внимание, что у нас перед массивом объектов Dog находится модификатор static. Также добавим метод main:
class ObjMass { static Dog[] abc = new Dog [3]; public static void main (String[] args){ } } } class Dog{ String name; public Dog (String name){ this.name = name; } }
Для вывода массива на экран создаём цикл. И выводим не имена собак (abc[i].name), а объекты — abc[i]:
class ObjMass { static Dog[] abc = new Dog [3]; public static void main (String[] args){ for (int i = 0; i<3; i++){ System.out.println(abc[i]); } } } class Dog{ String name; public Dog (String name){ this.name = name; } }
И увидим следующий результат:
null null null
Это и есть значения по умолчанию, при ссылке на которые возникнет ошибка NullPointerException. Она появляется, когда мы ссылаемся на свойство null-ного объекта. К примеру, давайте попробуем вывести на экран имена собак (abc[i].name):
class ObjMass { static Dog[] abc = new Dog [3]; public static void main (String[] args){ for (int i = 0; i<3; i++){ System.out.println(abc[i].name); } } } class Dog{ String name; public Dog (String name){ this.name = name; } }
Результатом станет тот самый NullPointerException. Чтобы этого не допустить, массив объектов надо заполнить:
class ObjMass { static Dog[] abc = new Dog [3]; public static void main (String[] args){ abc[0] = new Dog("Billy"); abc[1] = new Dog("Tom"); abc[2] = new Dog("Jonny"); for (int i = 0; i<3; i++){ System.out.println(abc[i].name); } } } class Dog{ String name; public Dog (String name){ this.name = name; } }
Результат выполнения кода:
Billy Tom Jonny
Вот и всё, теперь вы знакомы с особенностями применения массива объектов в Java и знаете, как добавить объект в массив. В прочих аспектах всё функционирует практически так же, как и в массивах примитивных типов.