how handle arrayindexoutofboundsexception java
примери за приложения на интернет на нещата
Този урок предоставя подробно обяснение за важно изключение, изхвърлено от Java масиви, т.е. ArrayIndexOutOfBoundsException с прости примери:
Научихме всичко за масивите в предишните ни уроци. Масивите имат статичен характер и размерът или размерът им се определя по време на тяхното деклариране. Също така знаем, че този размер или броят на елементите, декларирани за масива, са фиксирани и са номерирани от 0.
Понякога програмната логика е такава, че програмата се опитва да получи достъп до елемента от несъществуващ индекс. Например, поради проблеми в програмата, програма може да се опита да осъществи достъп до 11-тетиелемент в масива от 10 елемента. Това води до необичайно състояние.
=> Вижте пълното обучение за Java за начинаещи
Java предоставя изключение в пакета ‘java.lang’, което се изхвърля при достъп до несъществуващ индекс на масив. Това е известно като „ArrayIndexOutOfBoundsException“.
Какво ще научите:
ArrayIndexOutOfBoundsException
Както вече беше посочено, когато се опитвате да получите достъп до елементи на масив над определена дължина или отрицателен индекс, компилаторът изхвърля ‘ArrayIndexOutOfBoundsException’.
ArrayIndexOutOfBoundsException реализира интерфейс „сериализуем“ и произлиза от „indexOutOfBoundsException“, който от своя страна е получен от класа RuntimeException, който е подклас на класа „изключение“. Всички тези класове принадлежат към пакета ‘java.lang’.
ArrayIndexOutOfBoundsException е изпълнение, непроверено изключение и следователно не е необходимо изрично да се извиква от метод. Следва диаграмата на класа на ArrayIndexOutOfBoundsException, която показва йерархията на наследяване, както и конструкторите за това изключение.
Диаграма на класа на ArrayIndexOutOfBoundsException
Както беше обяснено по-рано, класът ArrayIndexOutOfBoundsException има три суперкласа, т.е. java.lang.exception, java.lang. runtimeException и java.lang.indexOutOfBoundsException.
След това ще видим няколко примера за ArrayIndexOutOfBoundsException в java.
Пример за изключение ArrayIndexOutOfBounds
Нека видим първия пример, който показва хвърляното изключение ArrayIndexOutOfBounds.
class Main { public static void main(String() args) { //array of subjects. There are 5 elements. String() subjects = {'Maths','Science','French','Sanskrit', 'English'}; //for loop iterates from 0 to 5 (length of array) for(int i=0;i<=subjects.length;i++) { //when ‘i’ reaches 5, it becomes invalid index and exception will be thrown System.out.print(subjects(i) + ' '); } }
Изход:
В горната програма имаме масивни предмети, състоящи се от 5 елемента. В цикъла for обаче сме задали условието за итерация като i<=subjects.length. Thus for the last iteration, the value of i is 5 which exceeds the array size. Hence, when printing array elements, the iteration i=5, results in ArrayIndexOutOfBoundsException being thrown.
По-долу е даден друг пример за достъп до отрицателния индекс.
class Main { public static void main(String() args) { //array of integers Integer() intArray = {10,20,30,40,50}; //index = 0; accessing element is successful System.out.println('First element: ' + intArray(0)); //index = -4; accessing fails. Exception thrown System.out.println('Last element: ' + intArray(-4)); }
Изход:
В горната програма декларираме масив от цяло число и след това осъществяваме достъп до елементите, като използваме отделни индекси. Първият израз е валиден, но във втория израз сме се опитали да получим достъп до елемента при index = -4. Следователно вторият израз хвърля ArrayIndexOutOfBoundsException, както е показано в изхода.
Избягване на ArrayIndexOutOfBoundsException
Честата причина за появата на ArrayIndexOutOfBoundsException е, че програмистът прави грешка при използването на индексите на масива.
По този начин програмистът може да следва посочените по-долу техники, за да избегне появата на ArrayIndexOutOfBoundsException.
Използвайте правилни начални и крайни индекси
Масивите винаги започват с индекс 0, а не с 1. По същия начин последният елемент в масива може да бъде достъпен с помощта на индекса ‘arraylength-1’, а не ‘arraylength’. Програмистите трябва да бъдат внимателни, докато използват ограниченията на масива и по този начин да избягват ArrayIndexOutOfBoundsException.
Използване на Enhanced For Loop
Усъвършенстваният цикъл for или за всеки цикъл се итератира върху съседни места в паметта като масиви и има достъп само до правните индекси. Следователно, когато се използва подобрен цикъл за, не е нужно да се притесняваме за достъп до грешни или незаконни индекси.
Пример за итерация върху масив с помощта на Enhanced for Loop.
class Main { public static void main(String() args) { //array of subjects. There are 5 elements. String() subjects = {'Maths','Science','French','Sanskrit', 'English'}; System.out.println('') //define enhanced for loop to iterate over array for(String strval:subjects) { //iterates only through valid indices System.out.print(strval + ' '); } } }
Изход:
Използвахме усъвършенстван цикъл for в горната програма, за да прегледаме масива от теми. Имайте предвид, че за този цикъл не е необходимо да посочваме индекса изрично. Следователно цикълът се итерира върху масива, докато се стигне до края на масива.
По този начин е лесно да се коригира ArrayOutOfBoundsException, като се използват правилни индекси и се внимава при определяне на границите на масива. Можем също така да използваме усъвършенстван цикъл for, за да итерираме масивите.
Нека продължим да отговаряме на няколко често задавани въпроса относно изключенията в масиви.
често задавани въпроси
В # 1) Защо възниква ArrayIndexOutOfBoundsException?
Отговор: ArrayIndexOutOfBoundsException възниква при опит за достъп до индекс на масив, който не съществува, т.е. индексът е или отрицателен, или извън границите с ограниченията на масива.
В # 2) Какво е NegativeArraySizeException?
Отговор: NegativeArraySizeException е изключение по време на изпълнение, което се изхвърля, ако масивът е дефиниран с отрицателен размер.
В # 3) Какво представлява масивът от обвързаното изключение?
Отговор: Масив извън обвързано изключение възниква, когато програма се опитва да осъществи достъп до елемент на масив, като посочи отрицателен индекс или индекс, който не е в обхвата на посочения масив.
В # 4) Можем ли да хвърлим NullPointerException в Java?
Отговор: Да, можете да хвърлите NullPointerException в Java или в противен случай JVM ще го направи вместо вас.
В # 5) Проверено ли е или не отметнато NullPointerException?
Отговор: NullPointerException е отметнато и разширява RuntimeException. Това не принуждава програмиста да използва catch блока, за да се справи с него.
Заключение
В този урок обсъдихме подробностите за ArrayIndexOutOfBoundsException в Java. Това изключение обикновено се изхвърля, когато в програма се опитваме да осъществим достъп до елементите на масива, използвайки отрицателния индекс или индекса извън границите, като указване на индекс, който е по-голям от определената дължина на масива.
Това изключение може да се избегне, като се погрижите за индексите, докато осъществявате достъп до масивите или използвате усъвършенстван цикъл for, който по дизайн има достъп само до законни индекси.
Ще преминем към други теми за масиви в следващите ни уроци.
=> Разгледайте БЕЗПЛАТНИЯ курс по Java тук.
Препоръчително четене
- Урок за отражение на Java с примери
- Урок за дължина на масив Java с примери за кодове
- Изключения на Java и обработка на изключения с примери
- Урок за JAVA за начинаещи: 100+ практически ръководства за Java видео
- Модификатори на достъп в Java - Урок с примери
- Java Array - Как да отпечатвате елементи от масив в Java?
- Въведение в езика за програмиране на Java - видео урок
- Java SWING Урок: Контейнер, компоненти и обработка на събития