how handle arrayindexoutofboundsexception java
Bu Öğretici Java Dizileri tarafından oluşturulan Önemli Bir İstisna Hakkında Ayrıntılı Bir Açıklama (Basit Örneklerle ArrayIndexOutOfBoundsException) sağlar:
Önceki eğitimlerimizde Diziler hakkında her şeyi öğrendik. Diziler yapıları gereği statiktir ve boyutları bildirildikleri sırada belirlenir. Ayrıca bu boyutun veya dizi için bildirilen eleman sayısının sabit olduğunu ve 0'dan numaralandırıldığını biliyoruz.
Bazen program mantığı, programın öğeye var olmayan bir dizinden erişmeye çalışacağı şekildedir. Örneğin, bir programdaki aksaklıklar nedeniyle, bir program 11inci10 öğe dizisindeki öğe. Bu anormal bir duruma neden olur.
=> Yeni Başlayanlar İçin Tam Java Eğitimine Göz Atın
Java, 'java.lang' paketinde, var olmayan bir dizi dizinine erişildiğinde atılan bir istisna sağlar. Bu, 'ArrayIndexOutOfBoundsException' olarak bilinir.
Ne öğreneceksin:
ArrayIndexOutOfBoundsException
Daha önce belirtildiği gibi, dizi öğelerine belirli bir uzunluğun veya negatif bir dizinin ötesinde erişmeye çalıştığınızda, derleyici 'ArrayIndexOutOfBoundsException' öğesini atar.
ArrayIndexOutOfBoundsException bir 'serileştirilebilir' arabirim uygular ve 'indexOutOfBoundsException' dan türetilir ve bu da 'istisna' sınıfının bir alt sınıfı olan RuntimeException sınıfından türetilir. Tüm bu sınıflar 'java.lang' paketine aittir.
ArrayIndexOutOfBoundsException bir çalışma zamanıdır, denetlenmemiş istisnadır ve bu nedenle bir yöntemden açıkça çağrılması gerekmez. Aşağıda, miras hiyerarşisinin yanı sıra bu istisna için oluşturucuları gösteren ArrayIndexOutOfBoundsException sınıf diyagramı verilmiştir.
ArrayIndexOutOfBoundsException Sınıf Diyagramı
Daha önce açıklandığı gibi, ArrayIndexOutOfBoundsException sınıfının üç süper sınıfı vardır, yani java.lang.exception, java.lang. runtimeException ve java.lang.indexOutOfBoundsException.
Sonra, java'da ArrayIndexOutOfBoundsException'ın bazı örneklerini göreceğiz.
ArrayIndexOutOfBounds İstisnası Örneği
ArrayIndexOutOfBounds Özel Durumunun atıldığını gösteren ilk örneğe bakalım.
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) + ' '); } }
Çıktı:
Giriş için test verilerini kullanarak bir program çalıştırmak neden gereklidir?
Yukarıdaki programda 5 elementten oluşan dizi konularımız var. Bununla birlikte, for döngüsünde yineleme koşulunu i olarak ayarladık<=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.
Negatif endekse erişmenin başka bir örneği aşağıda verilmiştir.
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)); }
Çıktı:
Yukarıdaki programda, tamsayı türünde bir dizi bildiriyoruz ve ardından öğelere tek tek indeksleri kullanarak erişiyoruz. İlk ifade geçerlidir ancak ikinci ifadede, indeks = -4'teki elemana erişmeye çalıştık. Bu nedenle, ikinci ifade çıktıda gösterildiği gibi ArrayIndexOutOfBoundsException oluşturur.
ArrayIndexOutOfBoundsException'dan Kaçınma
ArrayIndexOutOfBoundsException oluşumunun ortak nedeni, programcının dizi indekslerini kullanırken bir hata yapmasıdır.
Böylelikle programcı, ArrayIndexOutOfBoundsException oluşumunu önlemek için aşağıdaki teknikleri izleyebilir.
Uygun Başlangıç ve Bitiş Endekslerini Kullanın
Diziler her zaman dizin 0 ile başlar ve 1 ile değil. Benzer şekilde, dizideki son öğeye 'dizi uzunluğu' değil 'dizi uzunluğu-1' dizini kullanılarak erişilebilir. Programcılar dizi sınırlarını kullanırken dikkatli olmalı ve bu nedenle ArrayIndexOutOfBoundsException'dan kaçınmalıdır.
Döngü İçin Geliştirilmiş Kullanımı
Geliştirilmiş for döngüsü veya her döngü için, diziler gibi bitişik bellek konumlarını yineler ve yalnızca yasal indekslere erişir. Bu nedenle, geliştirilmiş for döngüsü kullanıldığında, yanlış veya geçersiz indekslere erişilmesi konusunda endişelenmemize gerek yoktur.
Enhanced for Loop kullanarak bir dizi üzerinde yineleme örneği.
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 + ' '); } } }
Çıktı:
Yukarıdaki programda, konu dizisi üzerinde yineleme yapmak için geliştirilmiş bir for döngüsü kullandık. Bu döngü için indeksi açıkça belirtmemize gerek olmadığını unutmayın. Dolayısıyla döngü, dizinin sonuna ulaşılana kadar dizi üzerinde yinelenir.
Bu nedenle, ArrayOutOfBoundsException'ı uygun indisler kullanarak ve dizi sınırlarını belirlerken dikkatlice düzeltmek kolaydır. Diziler üzerinde yineleme yapmak için gelişmiş for döngüsünden de yararlanabiliriz.
Dizilerdeki istisnalarla ilgili sık sorulan birkaç soruyu yanıtlayalım.
Sıkça Sorulan Sorular
S # 1) ArrayIndexOutOfBoundsException neden oluşur?
Cevap: ArrayIndexOutOfBoundsException, var olmayan bir dizi dizinine erişmeye çalıştığınızda oluşur, örn. dizin ya negatiftir ya da dizi sınırları ile sınırların dışındadır.
S # 2) NegativeArraySizeException nedir?
Cevap: NegativeArraySizeException, bir dizi negatif bir boyutla tanımlanırsa atılan bir çalışma zamanı istisnasıdır.
S # 3) Dizi dışı istisna nedir?
Cevap: Bir program, negatif bir dizin veya belirtilen dizinin aralığında olmayan bir dizin belirterek bir dizi öğesine erişmeye çalıştığında, sınır dışı bir dizi istisna oluşur.
S # 4) Java'da NullPointerException oluşturabilir miyiz?
Cevap: Evet, Java'da NullPointerException oluşturabilir veya JVM bunu sizin için yapacaktır.
S # 5) NullPointerException işaretli mi yoksa kontrol edilmemiş mi?
Cevap: NullPointerException işaretli değildir ve RuntimeException'ı genişletir. Programcıyı yakalamak için catch bloğunu kullanmaya zorlamaz.
Sonuç
Bu eğiticide, Java'da ArrayIndexOutOfBoundsException'ın ayrıntılarını tartıştık. Bu istisna, genellikle bir programda, negatif indeksi kullanarak dizi elemanlarına veya belirtilen dizi uzunluğundan daha büyük bir indeksi belirtmek gibi sınır dışı indeksi kullanarak erişmeye çalıştığımızda atılır.
Dizilere erişirken indislere dikkat edilerek veya tasarım gereği yalnızca yasal indekslere erişen gelişmiş for döngüsü kullanılarak bu istisna önlenebilir.
Sonraki eğitimlerimizde diğer dizi konularına geçeceğiz.
=> ÜCRETSİZ Java Kursunu Buradan Keşfedin.
Önerilen Kaynaklar
- Örneklerle Java Yansıtma Eğitimi
- Kod Örnekleriyle Java Dizi Uzunluğu Eğitimi
- Java İstisnaları ve Örneklerle İstisna İşlemleri
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi
- Java'da Erişim Değiştiriciler - Örneklerle Eğitim
- Java Dizisi - Java'da Bir Dizinin Elemanları Nasıl Yazdırılır?
- Java Programlama Diline Giriş - Video Eğitimi
- Java SWING Eğitimi: Konteyner, Bileşenler ve Olay İşleme