Программирование

Массивы в Java: объявление и инициализация с примерами

Как объявить и инициализировать массив в Java: new, литералы, циклы, Arrays.fill, стримы. Примеры для int, String, многомерных массивов. Типичные ошибки и советы для начинающих программистов.

Как объявить и инициализировать массив в Java? Пожалуйста, приведите примеры различных методов инициализации.

Массивы в Java объявляются как ссылочные переменные, например int[] nums;, а затем создаются оператором new или инициализируются сразу литералом. Ниже — коротко и наглядно: как объявить массив и инициализировать массив в Java разными способами (литералы, new, циклы, Arrays.fill, Arrays.setAll, стримы и т.д.), с примерами и типичными ошибками.


Содержание


Объявление массива в Java

Массив объявляют как переменную ссылочного типа: тип[] имя или устаревший тип имя[]. Предпочтительнее первый вариант — он явно показывает, что переменная типа «массив типа T».

Примеры:

java
int[] nums; // объявление (переменная ссылается на массив)
String[] names; // массив строк
double[][] mat; // двумерный массив

После объявления память под элементы не выделена — переменная равна null до создания массива с помощью new:

java
nums = new int[4]; // создаём массив из 4 элементов, все значения по умолчанию = 0
System.out.println(nums.length); // length — свойство массива (не метод)

Подробно синтаксис и поведение описаны в руководстве Metanit и в материале Javarush.


Инициализация массива в Java — базовые способы

Способ 1 — создание с new (элементы получают значения по умолчанию):

java
int[] a = new int[5]; // {0, 0, 0, 0, 0}
String[] s = new String[3]; // {null, null, null}

Способ 2 — литерал инициализации (сокращённая форма при объявлении):

java
int[] b = {1, 2, 3, 5}; // размер выводится автоматически
String[] names = {"Анна", "Борис", "Вася"};

Замечание: конструкция с фигурными скобками без new допустима только в момент объявления. Если объявление и присваивание разделены, используйте new:

java
int[] c;
c = new int[] {1, 2, 3}; // правильно
// c = {1,2,3}; // ошибка компиляции

Способ 3 — анонимный массив (полезно при передаче в метод):

java
printSum(new int[] {1,2,3});

Способ 4 — заполнение через for или for-each:

java
int[] idx = new int[10];
for (int i = 0; i < idx.length; i++) idx[i] = i * 2;

Способ 5 — утилиты Arrays и стримы:

java
import java.util.Arrays;
import java.util.stream.IntStream;

int[] filled = new int[5];
Arrays.fill(filled, 42); // заполняет значением 42

int[] squares = new int[5];
Arrays.setAll(squares, i -> i * i); // {0,1,4,9,16}

int[] seq = IntStream.range(0, 10).toArray(); // {0,1,2,...,9}

О продвинутых методах и примерах читайте на LabEx и в обзоре на Skillbox.


Примеры инициализации массивов

  1. Одномерный массив — объявление + заполнение циклом:
java
int[] arr = new int[6];
for (int i = 0; i < arr.length; i++) arr[i] = i + 1; // {1,2,3,4,5,6}
  1. Объектный массив — нужно создать объекты вручную:
java
class Person { String name; Person(String name){this.name = name;} }

Person[] ppl = new Person[3];
ppl[0] = new Person("Иван");
ppl[1] = new Person("Оля");
ppl[2] = new Person("Сергей");
  1. Добавление элемента в «фиксированный» массив (создаём новый):
java
int[] add(int[] src, int val) {
 int[] res = Arrays.copyOf(src, src.length + 1);
 res[res.length - 1] = val;
 return res;
}
  1. Конвертация List → массив:
java
List<String> list = Arrays.asList("a","b","c");
String[] a = list.toArray(new String[0]); // рекомендуемый паттерн
  1. Передача анонимного массива в метод:
java
static void printSum(int[] arr) {
 int sum = 0;
 for (int v : arr) sum += v;
 System.out.println(sum);
}
...
printSum(new int[] {10, 20, 30});

Для обзора простых примеров см. ExamClouds — одномерные массивы.


Многомерные массивы в Java

Двумерный массив:

java
int[][] matrix = new int[3][3]; // 3 строки и 3 столбца, все 0
int[][] matrix2 = { {1,2,3}, {4,5,6}, {7,8,9} }; // литерал

Зубчатый (jagged) массив — строки разной длины:

java
int[][] jagged = new int[3][];
jagged[0] = new int[2];
jagged[1] = new int[4];
jagged[2] = new int[1];

Печать многомерного массива с удобным выводом:

java
System.out.println(Arrays.deepToString(matrix2)); // [[1,2,3],[4,5,6],[7,8,9]]

Многомерные массивы обсуждаются и на Metanit, и в материалах Skillbox (с примерами).


Полезные методы и работа с массивами

Класс java.util.Arrays и стандартные утилиты дают основные операции:

  • Arrays.toString(arr) — печать одномерного массива.
  • Arrays.deepToString(objArr) — печать вложенных массивов.
  • Arrays.sort(arr) — сортировка.
  • Arrays.binarySearch(arr, key) — бинарный поиск (после сортировки).
  • Arrays.copyOf, Arrays.copyOfRange — копирование/извлечение.
  • Arrays.fill — заполнение одним значением.
  • Arrays.setAll — заполнение функцией.

Пример сортировки и поиска:

java
int[] a = {5, 2, 8, 1};
Arrays.sort(a); // {1,2,5,8}
int idx = Arrays.binarySearch(a, 5); // 2

Также удобно работать со стримами:

java
int sum = Arrays.stream(a).sum();
int[] top10 = IntStream.range(0, 100).limit(10).toArray();

Дополнительные приёмы и утилиты для работы с массивами описаны в TechieDelight и других ресурсах.


Частые ошибки и советы

  • NullPointerException: объявили int[] a; и сразу обращаетесь к a.length — сначала нужно new.
  • ArrayIndexOutOfBoundsException: индексы от 0 до length-1. Проверяйте границы.
  • Литерал {...} нельзя использовать отдельно при последующем присваивании — только при объявлении.
  • Массив имеет фиксированный размер. Нужна «динамика» — используйте ArrayList<T> или создавайте новый массив через Arrays.copyOf.
  • Для печати массивов используйте Arrays.toString() / Arrays.deepToString() вместо System.out.println(arr), иначе вы увидите адрес в куче.
  • Помните: у массива — свойство length, у String — метод length().

Небольшой практический совет: если вы часто добавляете/удаляете элементы, лучше сразу выбрать коллекцию (например, ArrayList), а не пытаться «расширять» массив.


Источники


Заключение

Массивы в Java — простой и эффективный способ хранить набор однотипных данных: вы можете объявить массив, создать его через new или инициализировать сразу литералом. Для заполнения и преобразований используйте циклы, Arrays.fill/Arrays.setAll, стримы и методы копирования; а если нужен изменяемый по размеру контейнер — ArrayList. Попробуйте несколько подходов на практике: литералы для константных наборов, new + циклы/Arrays для генерации, стримы для «функционального» заполнения — и вы быстро поймёте, что удобнее в каждой задаче.

Авторы
Проверено модерацией
Модерация
Массивы в Java: объявление и инициализация с примерами