Перейти к основному содержимому

Руководство по ArrayStoreException

· 2 мин. чтения

1. Обзор

ArrayStoreException генерируется во время выполнения в Java , когда предпринимается попытка сохранить объект неправильного типа в массиве объектов . Поскольку ArrayStoreException является непроверенным исключением , его не принято обрабатывать или объявлять.

В этом руководстве мы продемонстрируем причину ArrayStoreException , способы ее обработки и рекомендации по ее предотвращению.

2. Причины ArrayStoreException

Java генерирует исключение ArrayStoreException , когда мы пытаемся сохранить объект другого типа в массиве вместо объявленного типа.

Предположим, мы создали массив типа String , а затем попытались сохранить в нем Integer . В этом случае во время выполнения выбрасывается ArrayStoreException :

Object array[] = new String[5];
array[0] = 2;

Исключение будет выброшено во второй строке кода, когда мы попытаемся сохранить в массиве неверный тип значения:

Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
at com.foreach.array.arraystoreexception.ArrayStoreExceptionExample.main(ArrayStoreExceptionExample.java:9)

Поскольку мы объявили массив как объект , компиляция выполняется без ошибок .

3. Обработка исключения ArrayStoreException

Обработка этого исключения довольно проста. Как и любое другое исключение, оно также должно быть заключено в блок try-catch для обработки:

try{
    Object array[] = new String[5];
array[0] = 2;
}
catch (ArrayStoreException e) {
// handle the exception
}

4. Лучшие практики, чтобы избежать этого исключения

Рекомендуется объявлять тип массива как определенный класс, например String или Integer , вместо Object . Когда мы объявляем тип массива как Object, компилятор не выдает никаких ошибок.

Но объявление массива с базовым классом и последующее сохранение объектов другого класса приведет к ошибке компиляции . Давайте посмотрим на это на быстром примере:

String array[] = new String[5];
array[0] = 2;

В приведенном выше примере мы объявляем тип массива как String и пытаемся сохранить в нем целое число . Это приведет к ошибке компиляции:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from int to String
at com.foreach.arraystoreexception.ArrayStoreExampleCE.main(ArrayStoreExampleCE.java:8)

Будет лучше, если мы поймаем ошибки во время компиляции, а не во время выполнения , поскольку у нас больше контроля над первым.

5. Вывод

В этом руководстве мы узнали о причинах, обработке и предотвращении ArrayStoreException в Java.

Полный пример доступен на GitHub .