java.lang.ArrayStoreException เป็น unchecked exception ที่เกิดขึ้นเมื่อเราพยายามเก็บออบเจ็กต์ของชนิดหนึ่งลงในอาเรย์ของออบเจ็กต์ชนิดอื่น ปกติแล้วจะพบ java.lang.ArrayStoreException: java.lang.Integer ซึ่งเกิดจากการพยายามเก็บค่า Integer ลงในอาเรย์ชนิดอื่น เช่น อาเรย์ของ String หรือ Float
ตัวอย่างที่ 1
public class ArrayStoreExceptionTest {
public static void main(String[] args) {
Object[] names = new Float[2];
names[1] = new Integer(2);
}
}
ผลลัพธ์
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
at ArrayStoreExceptionTest.main(ArrayStoreExceptionTest.java:4)
ในโปรแกรมด้านบน java.lang.ArrayStoreException: java.lang.Integer เกิดขึ้นเพราะ:
- java.lang.ArrayStoreException: Exception ที่ Java โยนเมื่อพยายามเก็บออบเจ็กต์ java.lang.Integer ลงในอาเรย์ของ java.lang.Float
- java.lang.Integer: ชนิดของออบเจ็กต์ที่พยายามเก็บลงในอาเรย์ชนิดอื่น
วิธีจัดการ ArrayStoreException
เราสามารถจัดการ ArrayStoreException ได้โดยใช้ try-catch blocks
- ล้อมรอบคำสั่งที่อาจโยน ArrayStoreException ด้วย try-catch blocks
- จับ ArrayStoreException
- ดำเนินการที่จำเป็นสำหรับโปรแกรม เนื่องจากเราจัดการ exception แล้ว การทำงานจึงไม่หยุดชะงัก
ตัวอย่างที่ 2
public class ArrayStoreExceptionTest {
public static void main(String[] args) {
Object[] names = new Float[2];
try {
names[1] = new Integer(2);
} catch (ArrayStoreException e) {
e.printStackTrace();
System.out.println("ArrayStoreException is handled");
}
System.out.println("Continuing with the statements after try and catch blocks");
}
}
ผลลัพธ์
ArrayStoreException is handled
Continuing with the statements after try and catch blocks
java.lang.ArrayStoreException: java.lang.Integer
at ArrayStoreExceptionTest.main(ArrayStoreExceptionTest.java:5)
ในตัวอย่างนี้ เมื่อ exception เกิดขึ้น การทำงานจะกระโดดไปที่ catch block จากจุดที่ exception เกิดขึ้น ทำงานคำสั่งใน catch block แล้วต่อไปทำงานคำสั่งหลัง try-catch blocks ต่อ