ArrayIndexOutOfBoundsException возникает, когда мы пытаемся обратиться к элементу массива по индексу, которого не существует.
В этом материале я разбираю 3 способа обработки этой ошибки.
В Java индексы массива начинаются с 0 и заканчиваются на длина_массива - 1.
Если массив из 3 элементов (индексы 0, 1, 2), то обращение к индексу 5 вызовет ошибку:
int[] arr = {1, 2, 3};
System.out.println(arr[5]); // ❌ ArrayIndexOutOfBoundsExceptionПрограмма падает. Чтобы этого избежать — используем try-catch.
Код:
public static void main(String[] args) {
int[] arr = {1, 2, 3};
try {
System.out.println(arr[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Выход за границы массива");
}
}Что происходит:
try— пытаемся получить элемент по индексу5- Индекса
5нет в массиве (максимальный индекс = 2) - Возникает
ArrayIndexOutOfBoundsException catchловит именно эту ошибку и выводит сообщение
Вывод:
Выход за границы массива
Этот catch поймает только ошибки выхода за границы массива. Другие ошибки (например NullPointerException) он не обработает.
Код:
public static void main(String[] args) {
int[] arr = {1, 2, 3};
try {
System.out.println(arr[5]);
} catch (Exception e) {
System.out.println("Ошибка массива");
}
}Что происходит:
catch (Exception e)— ловит любое исключениеArrayIndexOutOfBoundsException— это частный случайException, поэтому он тоже будет пойман
Вывод:
Ошибка массива
Exception ловит всё. Удобно, если не важно, какая именно ошибка случилась.
Но если нужно разное поведение для разных ошибок — лучше использовать несколько catch или конкретный тип.
Код:
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
try {
System.out.println(getElement(arr, 10));
} catch (Exception e) {
System.out.println("Ошибка: " + e.getMessage());
}
}
public static int getElement(int[] arr, int index) {
if (index < 0 || index >= arr.length) {
throw new ArrayIndexOutOfBoundsException("Выход за границы массива");
}
return arr[index];
}Что происходит:
- В методе
getElementпроверяем, существует ли индекс - Если индекс меньше
0илибольше/равен длинемассива — сами создаём исключение черезthrow new ArrayIndexOutOfBoundsException(...) - В
mainловим это исключение и выводим сообщение из исключения черезe.getMessage()
Вывод:
Ошибка: Выход за границы массива
- Условие
index >= arr.lengthпроверяет, что индекс не выходит за верхнюю границу - Условие
index < 0проверяет, что индекс не отрицательный throw— создаёт исключение вручную с понятным сообщениемe.getMessage()— возвращает текст ошибки
- Индексы массива: от
0додлина - 1 ArrayIndexOutOfBoundsException— при обращении к несуществующему индексуcatch (ArrayIndexOutOfBoundsException e)— ловим только эту ошибкуcatch (Exception e)— ловит все ошибки (включая эту)throw new ArrayIndexOutOfBoundsException("текст")— создаём ошибку сами- Всегда полезно проверять индекс перед обращением к массиву
⭐ Когда моя программа падает с ArrayIndexOutOfBoundsException, я открываю этот файл и вспоминаю, как правильно обрабатывать выход за границы массива.