Cả Exception và Error đều là subclass của Throwable. Hiểu rõ sự khác biệt giúp xử lý lỗi hiệu quả hơn.
Bảng so sánh chi tiết
| STT | Tiêu chí | Error | Exception |
|---|---|---|---|
| 1 | Phân loại | Unchecked type (unchecked exception) | Cả Checked và Unchecked |
| 2 | Package | java.lang.Error |
java.lang.Exception |
| 3 | Khả năng phục hồi | Không thể phục hồi (irrecoverable) | Có thể phục hồi (recoverable) |
| 4 | Thời điểm xảy ra | Chỉ xảy ra tại runtime | Cả compile-time và runtime |
| 5 | Ví dụ điển hình | OutOfMemoryError, StackOverflowError, IOError |
NullPointerException, SQLException, IOException, ArithmeticException |
Ví dụ Error: StackOverflowError
public class ErrorExample {
public static void main(String[] args) {
recursiveMethod(10);
}
public static void recursiveMethod(int i) {
while (i != 0) {
i = i + 1; // Vô tận, không bao giờ bằng 0
recursiveMethod(i);
}
}
}
Output: Exception in thread "main" java.lang.StackOverflowError
Ví dụ Exception: ArithmeticException
public class ExceptionExample {
public static void main(String[] args) {
int x = 100;
int y = 0;
int z = x / y; // Chia cho 0
}
}
Output: java.lang.ArithmeticException: / by zero
Phân loại Exception
- Checked Exception: Compiler bắt buộc xử lý (try-catch hoặc throws):
IOException,SQLException. - Unchecked Exception (RuntimeException): Không bắt buộc xử lý:
NullPointerException,ArrayIndexOutOfBoundsException.
Best Practice
Không bao giờ catch Error (trừ khi logging trước khi crash). Error chỉ ra vấn đề nghiêm trọng của JVM/hệ thống mà ứng dụng không thể khắc phục. Chỉ catch và xử lý Exception.