Массивы в Java: объявление и инициализация с примерами
Как объявить и инициализировать массив в Java: new, литералы, циклы, Arrays.fill, стримы. Примеры для int, String, многомерных массивов. Типичные ошибки и советы для начинающих программистов.
Как объявить и инициализировать массив в Java? Пожалуйста, приведите примеры различных методов инициализации.
Массивы в Java объявляются как ссылочные переменные, например int[] nums;, а затем создаются оператором new или инициализируются сразу литералом. Ниже — коротко и наглядно: как объявить массив и инициализировать массив в Java разными способами (литералы, new, циклы, Arrays.fill, Arrays.setAll, стримы и т.д.), с примерами и типичными ошибками.
Содержание
- Объявление массива в Java
- Инициализация массива в Java — базовые способы
- Примеры инициализации массивов
- Многомерные массивы в Java
- Полезные методы и работа с массивами
- Частые ошибки и советы
- Источники
- Заключение
Объявление массива в Java
Массив объявляют как переменную ссылочного типа: тип[] имя или устаревший тип имя[]. Предпочтительнее первый вариант — он явно показывает, что переменная типа «массив типа T».
Примеры:
int[] nums; // объявление (переменная ссылается на массив)
String[] names; // массив строк
double[][] mat; // двумерный массив
После объявления память под элементы не выделена — переменная равна null до создания массива с помощью new:
nums = new int[4]; // создаём массив из 4 элементов, все значения по умолчанию = 0
System.out.println(nums.length); // length — свойство массива (не метод)
Подробно синтаксис и поведение описаны в руководстве Metanit и в материале Javarush.
Инициализация массива в Java — базовые способы
Способ 1 — создание с new (элементы получают значения по умолчанию):
int[] a = new int[5]; // {0, 0, 0, 0, 0}
String[] s = new String[3]; // {null, null, null}
Способ 2 — литерал инициализации (сокращённая форма при объявлении):
int[] b = {1, 2, 3, 5}; // размер выводится автоматически
String[] names = {"Анна", "Борис", "Вася"};
Замечание: конструкция с фигурными скобками без new допустима только в момент объявления. Если объявление и присваивание разделены, используйте new:
int[] c;
c = new int[] {1, 2, 3}; // правильно
// c = {1,2,3}; // ошибка компиляции
Способ 3 — анонимный массив (полезно при передаче в метод):
printSum(new int[] {1,2,3});
Способ 4 — заполнение через for или for-each:
int[] idx = new int[10];
for (int i = 0; i < idx.length; i++) idx[i] = i * 2;
Способ 5 — утилиты Arrays и стримы:
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.
Примеры инициализации массивов
- Одномерный массив — объявление + заполнение циклом:
int[] arr = new int[6];
for (int i = 0; i < arr.length; i++) arr[i] = i + 1; // {1,2,3,4,5,6}
- Объектный массив — нужно создать объекты вручную:
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("Сергей");
- Добавление элемента в «фиксированный» массив (создаём новый):
int[] add(int[] src, int val) {
int[] res = Arrays.copyOf(src, src.length + 1);
res[res.length - 1] = val;
return res;
}
- Конвертация List → массив:
List<String> list = Arrays.asList("a","b","c");
String[] a = list.toArray(new String[0]); // рекомендуемый паттерн
- Передача анонимного массива в метод:
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
Двумерный массив:
int[][] matrix = new int[3][3]; // 3 строки и 3 столбца, все 0
int[][] matrix2 = { {1,2,3}, {4,5,6}, {7,8,9} }; // литерал
Зубчатый (jagged) массив — строки разной длины:
int[][] jagged = new int[3][];
jagged[0] = new int[2];
jagged[1] = new int[4];
jagged[2] = new int[1];
Печать многомерного массива с удобным выводом:
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— заполнение функцией.
Пример сортировки и поиска:
int[] a = {5, 2, 8, 1};
Arrays.sort(a); // {1,2,5,8}
int idx = Arrays.binarySearch(a, 5); // 2
Также удобно работать со стримами:
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), а не пытаться «расширять» массив.
Источники
- Metanit — Java: Массивы
- Javarush — Массивы Java
- Skillbox — Массивы в Java: как создать, заполнить и использовать
- ExamClouds — Одномерный массив
- LabEx — Инициализация массивов в Java
- CodeRoad — Как объявить и инициализировать массив в Java
- Hexlet Q&A — Как создать массив в Java
- Proglang — Java – Массивы
- YoungLinux — Массивы в Java
- StackOverflow (RU) — Инициализация массивов
- Sky.Pro — Объявление и инициализация массивов в Java
- HR-Vector — Java массивы
- TechieDelight — Declare and initialize arrays in Java
Заключение
Массивы в Java — простой и эффективный способ хранить набор однотипных данных: вы можете объявить массив, создать его через new или инициализировать сразу литералом. Для заполнения и преобразований используйте циклы, Arrays.fill/Arrays.setAll, стримы и методы копирования; а если нужен изменяемый по размеру контейнер — ArrayList. Попробуйте несколько подходов на практике: литералы для константных наборов, new + циклы/Arrays для генерации, стримы для «функционального» заполнения — и вы быстро поймёте, что удобнее в каждой задаче.