how handle arrayindexoutofboundsexception java
Denna handledning ger en detaljerad förklaring om ett viktigt undantag som kastas av Java Arrays, dvs. ArrayIndexOutOfBoundsException med enkla exempel:
Vi har lärt oss allt om Arrays i våra tidigare självstudier. Arrayer är statiska till sin natur och dess dimension eller storlek bestäms vid tidpunkten för deklarationen. Vi vet också att den här storleken eller antalet element som deklareras för matrisen är fasta och numrerade från 0.
hur man öppnar .apk-filen
Ibland är programlogiken sådan att programmet försöker komma åt elementet från ett icke-existerande index. Till exempel, på grund av fel i ett program kan ett program försöka komma åt 11thelement i matrisen med tio element. Detta resulterar i ett onormalt tillstånd.
=> Kolla in hela Java-träningen för nybörjare
Java ger ett undantag i paketet 'java.lang' som kastas när ett icke-existerande matrisindex nås. Detta kallas 'ArrayIndexOutOfBoundsException'.
Vad du kommer att lära dig:
ArrayIndexOutOfBoundsException
Som redan nämnts, när du försöker komma åt matriselement utöver en viss längd eller ett negativt index, kastar kompilatorn 'ArrayIndexOutOfBoundsException'.
ArrayIndexOutOfBoundsException implementerar ett 'serialiserbart' gränssnitt och härrör från 'indexOutOfBoundsException' som i sin tur härleds från RuntimeException-klassen som är en underklass av 'exception' -klassen. Alla dessa klasser tillhör paketet 'java.lang'.
ArrayIndexOutOfBoundsException är ett kört, okontrollerat undantag och behöver därför inte uttryckligen anropas från en metod. Följande är klassdiagrammet för ArrayIndexOutOfBoundsException som visar arvshierarkin samt konstruktörerna för detta undantag.
Klassdiagram över matrisenIndexOutOfBoundsException
Som förklarats tidigare har klassen ArrayIndexOutOfBoundsException tre superklasser, dvs java.lang.exception, java.lang. runtimeException och java.lang.indexOutOfBoundsException.
Därefter ser vi några exempel på ArrayIndexOutOfBoundsException i java.
Exempel på ArrayIndexOutOfBounds undantag
Låt oss se det första exemplet som visar att ArrayIndexOutOfBounds-undantaget kastas.
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) + ' '); } }
Produktion:
I programmet ovan har vi matrisämnen som består av 5 element. I for-loop har vi dock ställt iterationsvillkoret som 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.
Nedan följer ett annat exempel på åtkomst till det negativa indexet.
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)); }
Produktion:
I ovanstående program deklarerar vi en matris av typens heltal och får sedan åtkomst till elementen med hjälp av enskilda index. Det första uttrycket är giltigt men i det andra uttrycket har vi försökt komma åt elementet vid index = -4. Därför kastar det andra uttrycket ArrayIndexOutOfBoundsException som visas i utdata.
Undvik ArrayIndexOutOfBoundsException
Den vanligaste orsaken till förekomsten av ArrayIndexOutOfBoundsException är att programmeraren gör ett misstag när han använder arrayindexen.
Således kan programmeraren följa nedanstående tekniker för att undvika förekomst av ArrayIndexOutOfBoundsException.
Använd korrekt start- och slutindex
Arrayer börjar alltid med index 0 och inte 1. På samma sätt kan det sista elementet i arrayen nås med indexet 'arraylength-1' och inte 'arraylength'. Programmerare bör vara försiktiga när de använder arraygränserna och därmed undvika ArrayIndexOutOfBoundsException.
Använda Enhanced For Loop
En förbättrad för loop eller för varje loop itererar över angränsande minnesplatser som matriser och får endast åtkomst till de lagliga indexen. Därför när förbättrad för loop används behöver vi inte oroa oss för felaktiga eller olagliga index.
Exempel på iterering över en matris med hjälp av 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 + ' '); } } }
Produktion:
Vi har använt en förbättrad for-loop i ovanstående program för att iterera över utbudet av ämnen. Observera att för den här slingan behöver vi inte specificera indexet uttryckligen. Därför kretsar slingan över matrisen tills slutet av matrisen nås.
Således är det enkelt att fixa ArrayOutOfBoundsException genom att använda korrekta index och vara försiktig när du anger arraygränser. Vi kan också använda förbättrad för loop för att iterera över matriserna.
Låt oss gå vidare och svara på några vanliga frågor om undantag i matriser.
Vanliga frågor
F # 1) Varför uppstår ArrayIndexOutOfBoundsException?
Svar: ArrayIndexOutOfBoundsException inträffar när du försöker komma åt ett matrisindex som inte existerar dvs. indexet är antingen negativt eller utanför gränserna med arraygränserna.
F # 2) Vad är NegativeArraySizeException?
Svar: NegativeArraySizeException är ett runtime-undantag som kastas om en array definieras med en negativ storlek.
F # 3) Vad är array utanför undantaget?
Svar: En matris utanför undantaget inträffar när ett program försöker få åtkomst till ett matriselement genom att ange ett negativt index eller ett index som inte ligger inom området för den angivna matrisen.
F # 4) Kan vi kasta NullPointerException i Java?
Svar: Ja, du kan kasta NullPointerException i Java, annars gör JVM det åt dig.
F # 5) Är NullPointerException markerad eller avmarkerad?
Svar: NullPointerException är avmarkerad och utökar RuntimeException. Det tvingar inte programmeraren att använda fångstblocket för att hantera det.
Slutsats
I den här handledningen diskuterade vi detaljerna i ArrayIndexOutOfBoundsException i Java. Detta undantag kastas vanligtvis när vi i ett program försöker komma åt arrayelementen med hjälp av det negativa indexet eller index utanför gränserna som att ange ett index som är större än den angivna arraylängden.
Detta undantag kan undvikas genom att ta hand om index medan du går in i matriserna eller använder förbättrad för loop som enligt design endast har åtkomst till lagliga index.
Vi kommer att gå vidare till andra array-ämnen i våra efterföljande handledning.
=> Utforska GRATIS Java-kursen här.
Rekommenderad läsning
- Java Reflection Tutorial med exempel
- Java Array Length Tutorial With Code Exempel
- Java-undantag och undantagshantering med exempel
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Åtkomstmodifierare i Java - Handledning med exempel
- Java Array - Hur man skriver ut delar av en array i Java?
- Introduktion till Java-programmeringsspråk - Videohandledning
- Java SWING-handledning: Container, komponenter och händelsehantering