Ошибка ArrayIndexOutOfBoundsException Java
ArrayIndexOutOfBoundsException – это исключение, появляющееся во время выполнения. Оно возникает тогда, когда мы пытаемся обратиться к элементу массива по отрицательному или превышающему размер массива индексу. Давайте посмотрим на примеры, когда получается ArrayIndexOutOfBoundsException в программе на Java.
Попробуйте выполнить такой код:
static int number=11; public static String[][] transactions=new String[8][number]; public static void deposit(double amount){ transactions[4][number]="deposit"; number++; } public static void main(String[] args) { deposit(11); } }Вы увидите ошибку:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0 at sample.Main.deposit(Main.java:22) at sample.Main.main(Main.java:27) Exception running application sample.Main Process finished with exit code 1Что здесь произошло? Ошибка в строке 27 – мы вызвали метод deposit(), а в нем уже, в строке 22 – попытались внести в поле массива значение "deposit". Почему выкинуло исключение? Дело в том, что мы инициализировали массив размера 11 (number = 11), н опопытались обратиться к 12-му элементу. Нумерация элементов массива начинается с нуля. Так что здесь надо сделать, например, так
public static String[][] transactions=new String[8][100];Но вообще, это плохой код, так писать не надо. Давайте рассмотрим еще один пример возникновения ошибки ArrayIndexOutOfBoundsException:
public static void main(String[] args) { Random random = new Random(); int [] arr = new int[10]; for (int i = 0; i <= arr.length; i++) { arr[i] = random.nextInt(100); System.out.println(arr[i]); } }Здесь массив заполняется случайными значениями. При выполнении IntelliJ IDEA выдаст ошибку
Caused by: java.lang.ArrayIndexOutOfBoundsException: 10 at sample.Main.main(Main.java:37)В строке 37 мы заносим значение в массив. Ошибка возникла помтому, что индекса 10 нет в массиве arr, поэтому условие цикла i <= arr.length надо поменять на i < arr.length
Конструкция try для ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException можно обработать с помощью конструкции try-catch. Для этого оберните try то место, где происходит обращение к элементу массива по индексу, например, заносится значение. Как-то так:
try { array[index] = "что-то"; } catch (ArrayIndexOutOfBoundsException ae){ System.out.println(ae); }Но я бы рекомендовал вам все же не допускать данной ошибки, писать код таким образом, чтобы не пришлось ловить исключение ArrayIndexOutOfBoundsException.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.