how handle arrayindexoutofboundsexception java
Tento výukový program poskytuje podrobné vysvetlenie dôležitej výnimky vyvolanej súbormi Java Arrays, tj. ArrayIndexOutOfBoundsException s jednoduchými príkladmi:
Všetko o poliach sme sa dozvedeli v našich predchádzajúcich tutoriáloch. Polia majú statickú povahu a ich rozmer alebo veľkosť sa určuje v čase ich vyhlásenia. Vieme tiež, že táto veľkosť alebo počet prvkov deklarovaných pre pole sú pevné a sú očíslované od 0.
Logika programu je niekedy taká, že sa program pokúša získať prístup k prvku z neexistujúceho indexu. Napríklad, z dôvodu závad v programe sa program môže pokúsiť získať prístup k 11thprvok v poli 10 prvkov. To má za následok abnormálny stav.
=> Vyskúšajte kompletné školenie Java pre začiatočníkov
Java poskytuje výnimku v balíku „java.lang“, ktorá sa vyvolá pri prístupe k neexistujúcemu indexu poľa. Toto sa nazýva „ArrayIndexOutOfBoundsException“.
Čo sa dozviete:
Ako otvorím súbory .jar
ArrayIndexOutOfBoundsException
Ako už bolo uvedené, pri pokuse o prístup k prvkom poľa presahujúcim stanovenú dĺžku alebo záporný index kompilátor hodí chybu „ArrayIndexOutOfBoundsException“.
ArrayIndexOutOfBoundsException implementuje „serializovateľné“ rozhranie a je odvodené od „indexOutOfBoundsException“, ktorý je zase odvodený od triedy RuntimeException, ktorá je podtriedou triedy „výnimka“. Všetky tieto triedy patria do balíka „java.lang“.
ArrayIndexOutOfBoundsException je runtime, nekontrolovaná výnimka, a preto nemusí byť explicitne volaná z metódy. Nasleduje diagram tried ArrayIndexOutOfBoundsException, ktorý zobrazuje hierarchiu dedičstva, ako aj konštruktory pre túto výnimku.
Diagram triedy ArrayIndexOutOfBoundsException
Ako už bolo vysvetlené, trieda ArrayIndexOutOfBoundsException má tri nadtriedy, t. J. Java.lang.exception, java.lang. runtimeException a java.lang.indexOutOfBoundsException.
Ďalej uvidíme niekoľko príkladov ArrayIndexOutOfBoundsException v jave.
Príklad výnimky ArrayIndexOutOfBounds
Pozrime sa na prvý príklad, ktorý ukazuje vyvolanie výnimky 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) + ' '); } }
Výkon:
Vo vyššie uvedenom programe máme pole predmetov pozostávajúcich z 5 prvkov. V cykle for sme však nastavili podmienku iterácie ako 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.
Ďalej je uvedený ďalší príklad prístupu k negatívnemu indexu.
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)); }
Výkon:
Vo vyššie uvedenom programe deklarujeme pole typu celé číslo a potom pristupujeme k prvkom pomocou jednotlivých indexov. Prvý výraz je platný, ale v druhom výraze sme sa pokúsili získať prístup k prvku na adrese index = -4. Preto druhý výraz hodí ArrayIndexOutOfBoundsException, ako je znázornené na výstupe.
Vyhýbanie sa ArrayIndexOutOfBoundsException
Bežnou príčinou výskytu ArrayIndexOutOfBoundsException je, že programátor urobí chybu pri používaní indexov poľa.
Programátor teda môže postupovať podľa nasledujúcich postupov, aby zabránil výskytu ArrayIndexOutOfBoundsException.
Používajte správne indexy začiatku a konca
Polia vždy začínajú indexom 0 a nie 1. Podobne je možné k poslednému prvku v poli pristupovať pomocou indexu „arraylength-1“ a nie „arraylength“. Programátori by mali byť pri používaní limitov poľa opatrní, a tak sa vyhnúť ArrayIndexOutOfBoundsException.
Používanie Enhanced For Loop
Vylepšená slučka pre každú slučku alebo pre každú slučku iteruje na susedné pamäťové miesta, ako sú polia, a pristupuje iba k legálnym indexom. Preto keď sa použije vylepšená slučka for, nemusíme sa báť, že by sa dostali k nesprávnym alebo nezákonným indexom.
Príklad iterácie nad poľom pomocou funkcie 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 + ' '); } } }
Výkon:
Vo vyššie uvedenom programe sme použili vylepšenú slučku for na iteráciu po rade predmetov. Upozorňujeme, že pre túto slučku nemusíme index výslovne špecifikovať. Smyčka teda iteruje cez pole, kým sa nedosiahne koniec poľa.
Takto je ľahké opraviť ArrayOutOfBoundsException použitím správnych indexov a opatrnosťou pri určovaní limitov poľa. Na iteráciu po poliach môžeme použiť aj vylepšenú slučku for.
Poďme ďalej odpovedať na niekoľko často kladených otázok týkajúcich sa výnimiek v poliach.
často kladené otázky
Otázka č. 1) Prečo sa vyskytuje ArrayIndexOutOfBoundsException?
Odpoveď: ArrayIndexOutOfBoundsException sa vyskytne, keď sa pokúsite získať prístup k indexu poľa, ktorý neexistuje, napr. index je buď negatívny, alebo je mimo hraníc s limitmi poľa.
Otázka 2) Čo je NegativeArraySizeException?
Odpoveď: NegativeArraySizeException je runtime výnimka, ktorá sa vyvolá, ak je pole definované so zápornou veľkosťou.
Otázka č. 3) Čo je to pole mimo viazanej výnimky?
Odpoveď: Pole mimo viazanej výnimky nastane, keď sa program pokúsi získať prístup k prvku poľa zadaním záporného indexu alebo indexu, ktorý nie je v rozsahu zadaného poľa.
Otázka č. 4) Môžeme vyhodiť NullPointerException v Jave?
Odpoveď: Áno, NullPointerException môžete hodiť do Javy, inak to urobí JVM za vás.
Otázka č. 5) Je NullPointerException zaškrtnutá alebo nezaškrtnutá?
Odpoveď: NullPointerException nie je začiarknuté a rozširuje RuntimeException. Nenúti programátora, aby na jeho zvládnutie použil blokovací blok.
Záver
V tomto tutoriáli sme diskutovali o podrobnostiach ArrayIndexOutOfBoundsException v Jave. Táto výnimka sa zvyčajne vyvolá, keď sa v programe pokúsime získať prístup k prvkom poľa pomocou záporného indexu alebo mimo index indexu, napríklad zadaním indexu, ktorý je väčší ako zadaná dĺžka poľa.
Tejto výnimke sa dá vyhnúť starostlivosťou o indexy pri prístupe k poliam alebo použitím vylepšenej slučky for, ktorá zámerne pristupuje iba k legálnym indexom.
V ďalších príručkách prejdeme k ďalším témam poľa.
=> Preskúmajte ZDARMA kurz Java tu.
Odporúčané čítanie
- Výukový program Java Reflection s príkladmi
- Výukový program Java Array Length s príkladmi kódu
- Výnimky Java a spracovanie výnimiek s príkladmi
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- Modifikátory prístupu v prostredí Java - návod s príkladmi
- Java Array - Ako tlačiť prvky poľa v Jave?
- Úvod do programovacieho jazyka Java - videonávod
- Výukový program Java SWING: Kontajnery, komponenty a spracovanie udalostí