ทั้ง Exception และ Error เป็น subclass ของคลาส Throwable Error บ่งบอกถึงปัญหาที่เกิดขึ้นหลักจากขาดแคลนทรัพยากรระบบ (system resources) และแอปพลิเคชันของเราไม่ควรจับ (catch) ปัญหาเหล่านี้ ตัวอย่างเช่น system crash error และ out of memory error Error เกิดขึ้นส่วนใหญ่ในขณะรันไทม์ (runtime) จึงเป็นประเภท unchecked
Exception เป็นปัญหาที่อาจเกิดขึ้นทั้งในขณะคอมไพล์ (compile time) และรันไทม์ (runtime) เกิดจากโค้ดที่นักพัฒนาเขียน Exception แบ่งเป็นสองประเภทคือ checked exceptions และ unchecked exceptions
ตารางเปรียบเทียบรายละเอียด
| ลำดับ | หัวข้อ | Error | Exception |
|---|---|---|---|
| 1 | ประเภท | จัดเป็น unchecked type | จัดเป็น checked และ unchecked ทั้งคู่ |
| 2 | แพ็กเกจ | อยู่ใน java.lang.Error | อยู่ใน java.lang.Exception |
| 3 | การกู้คืน (Recoverable) | เป็น irrecoverable (กู้คืนไม่ได้) | เป็น recoverable (กู้คืนได้) |
| 4 | เวลาเกิด | ไม่เกิดในขณะคอมไพล์ | เกิดได้ทั้งรันไทม์และคอมไพล์ไทม์ |
| 5 | ตัวอย่าง | OutOfMemoryError, IOError | NullPointerException, SQLException |
ตัวอย่าง Error
public class ErrorExample {
public static void main(String[] args) {
recursiveMethod(10);
}
public static void recursiveMethod(int i) {
while(i != 0) {
i = i + 1;
recursiveMethod(i);
}
}
}
ผลลัพธ์
Exception in thread "main" java.lang.StackOverflowError
at ErrorExample.recursiveMethod(Main.java:42)
ตัวอย่าง Exception
public class ExceptionExample {
public static void main(String[] args) {
int x = 100;
int y = 0;
int z = x / y;
}
}
ผลลัพธ์
java.lang.ArithmeticException: / by zero
at ExceptionExample.main(ExceptionExample.java:7)
สรุป
Error เป็นปัญหาระดับระบบที่นักพัฒนาควรหลีกเลี่ยงการจับ (catch) ในขณะที่ Exception เป็นปัญหาระดับแอปพลิเคชันที่ควรจัดการด้วย try-catch หรือ throws เพื่อให้โปรแกรมทำงานต่อได้อย่างสมบูรณ์