Ошибка 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, ArrayIndexOutOfBoundsException, java, ошибки, исключения




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 24. ArrayList Java
JQuery анимации
Урок 14. Префиксы, поддомены и подписанные роуты в Laravel