Rumah > Java > javaTutorial > teks badan

Apakah punca biasa ArrayIndexOutOfBoundsException di Java?

王林
Lepaskan: 2023-06-24 22:39:15
asal
1826 orang telah melayarinya

Java adalah bahasa pengaturcaraan yang sangat berkuasa yang digunakan secara meluas dalam pelbagai bidang pembangunan. Walau bagaimanapun, semasa pengaturcaraan Java, pembangun sering menghadapi pengecualian ArrayIndexOutOfBoundsException. Jadi, apakah punca biasa anomali ini?

ArrayIndexOutOfBoundsException ialah pengecualian masa jalan biasa di Java. Ini bermakna apabila mengakses data, subskrip tatasusunan melebihi julat tatasusunan. Sebab biasa termasuk yang berikut:

  1. Akses di luar sempadan tatasusunan

Subskrip tatasusunan bermula dari 0, tetapi kadangkala pembangun terlupa perkara ini, atau salah faham skop beberapa operasi tatasusunan, mengakibatkan capaian subskrip tatasusunan di luar had. julat melemparkan pengecualian.

Sebagai contoh, dalam kod di bawah, indeks tatasusunan i bermula daripada 1 dan bukannya 0, menyebabkan tatasusunan itu boleh diakses di luar julat.

int[] arr = {1, 2, 3};
for (int i = 1; i <= arr.length; i++) {
    System.out.println(arr[i]);
}
Salin selepas log masuk
  1. Tatasusunan tidak dimulakan

Apabila mengakses tatasusunan, jika tatasusunan tidak dimulakan, pengecualian ArrayIndexOutOfBoundsException akan dilemparkan.

Sebagai contoh, dalam kod berikut, tatasusunan arr diisytiharkan tetapi tidak dimulakan, menyebabkan elemen pada kedudukan indeks tidak dapat ditemui semasa mengakses tatasusunan.

int[] arr;
System.out.println(arr[0]);
Salin selepas log masuk
  1. Menggunakan panjang tatasusunan yang salah

Apabila pembangun menggunakan tatasusunan, mereka kadangkala tersilap menggunakan panjang tatasusunan yang salah, menyebabkan pengecualian dilemparkan apabila mengakses tatasusunan di luar julat.

Sebagai contoh, dalam kod di bawah, panjang tatasusunan salah ditetapkan kepada 2 dan bukannya 3 yang betul, menyebabkan tatasusunan itu boleh diakses di luar julat.

int[] arr = {1, 2, 3};
for (int i = 0; i < 2; i++) {
    System.out.println(arr[i]);
}
Salin selepas log masuk
  1. Akses serentak kepada tatasusunan

Dalam persekitaran berbilang benang, jika berbilang utas mengakses tatasusunan yang sama pada masa yang sama, ia mungkin menyebabkan tatasusunan keluar dari had dan membuang pengecualian.

Sebagai contoh, dalam kod berikut, dua utas mengakses tatasusunan yang sama pada masa yang sama Jika satu utas mengubah suai panjang tatasusunan, dan utas lain mengakses kedudukan indeks panjang yang diubah suai, pengecualian ArrayIndexOutOfBoundsException akan dilemparkan.

int[] arr = {1, 2, 3};
Thread thread1 = new Thread(() -> {
    arr[3] = 4;
});
Thread thread2 = new Thread(() -> {
    System.out.println(arr[3]);
});
thread1.start();
thread2.start();
Salin selepas log masuk

Dalam persekitaran berbilang benang, untuk mengelakkan pengecualian ini, pembangun boleh memastikan akses saling eksklusif melalui rangkaian dengan menggunakan blok yang disegerakkan dan mekanisme kunci.

Ringkasnya, sebab biasa pengecualian ArrayIndexOutOfBoundsException di Java termasuk akses luar sempadan tatasusunan, penyahinisialisasi tatasusunan, penggunaan panjang tatasusunan yang salah dan akses tatasusunan serentak. Untuk mengelakkan pengecualian sedemikian, pembangun perlu menyemak dengan teliti julat indeks tatasusunan, sama ada tatasusunan dimulakan, sama ada panjang tatasusunan adalah betul, dsb., untuk memastikan program berjalan seperti biasa.

Atas ialah kandungan terperinci Apakah punca biasa ArrayIndexOutOfBoundsException di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan