Unchecked exception (Ngoại Lệ Không Bắt Buộc Phải Xử Lý)
Unchecked exception (Ngoại lệ không bắt buộc phải xử lý) là các ngoại lệ không bắt buộc phải xử lý trong Java được gọi là RuntimeException. Là những ngoại lệ không bắt buộc phải xử lý. Chúng thường xảy ra do lỗi lập trình, như lỗi truy cập mảng vượt quá giới hạn, chia cho 0, v.v.
Các constructor của lớp RuntimeException
Trong Java, RuntimeException là một lớp ngoại lệ unchecked (không kiểm tra) kế thừa từ Exception. Các ngoại lệ thuộc loại này thường xảy ra do lỗi logic của chương trình, chẳng hạn như chia cho 0, truy cập phần tử ngoài phạm vi mảng hoặc tham chiếu đến một đối tượng null. Để tạo và xử lý các ngoại lệ tùy chỉnh thuộc loại RuntimeException, Java cung cấp một số constructor giúp khởi tạo đối tượng ngoại lệ với thông điệp lỗi hoặc nguyên nhân cụ thể. Dưới đây là các constructor quan trọng của lớp RuntimeException.
↳ RuntimeException(): Tạo một ngoại lệ runtime mới với thông báo chi tiết là null.
↳ RuntimeException(String message): Tạo một ngoại lệ runtime mới với thông báo chi tiết được chỉ định.
↳ RuntimeException(String message, Throwable cause): Tạo một ngoại lệ runtime mới với thông báo chi tiết được chỉ định và nguyên nhân gốc của lỗi.
↳ protected RuntimeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace): Đây là một constructor được bảo vệ (protected), thường dùng cho việc mở rộng lớp RuntimeException. Tạo một ngoại lệ runtime mới với thông báo chi tiết, nguyên nhân gốc, và các cờ kiểm soát hành vi của ngoại lệ.
↳ RuntimeException(Throwable cause): Tạo một ngoại lệ runtime mới với nguyên nhân gốc được chỉ định. Thông báo chi tiết sẽ là chuỗi biểu diễn của nguyên nhân gốc (nếu không null).
Dưới đây là danh sách các lớp RuntimeException kế thừa trực tiếp từ lớp Exception. Điều này có nghĩa là tất cả các lớp trong danh sách đều kế thừa trực tiếp từ lớp Exception và chia sẻ các đặc tính cơ bản của nó:
Ngoại lệ liên quan đến đa luồng (Concurrency)
↳ BrokenBarrierException: Liên quan trực tiếp đến cơ chế đồng bộ hóa luồng bằng barrier.
↳ ConcurrentModificationException: Xảy ra khi có nhiều luồng cùng thao tác trên một cấu trúc dữ liệu, gây ra xung đột và làm hỏng dữ liệu.
Ngoại lệ liên quan đến phản xạ (Reflection)
↳ IllegalClassFormatException: Liên quan đến lỗi trong việc định nghĩa lớp.
↳ ReflectiveOperationException: Là một ngoại lệ tổng quát cho các lỗi liên quan đến việc sử dụng reflection.
↳ NoSuchMethodException: Xảy ra khi không tìm thấy phương thức.
↳ InstantiationException: Liên quan đến việc tạo đối tượng.
Ngoại lệ liên quan đến kiểu dữ liệu và thao tác với dữ liệu
↳ NullPointerException: Lỗi thường gặp nhất, xảy ra khi sử dụng đối tượng null.
↳ ArrayIndexOutOfBoundsException: Lỗi truy cập phần tử ngoài phạm vi mảng.
↳ IllegalArgumentException: Đối số truyền vào hàm không hợp lệ.
↳ ArithmeticException: Lỗi trong phép toán số học.
↳ ClassCastException: Ép kiểu sai.
↳ IllegalStateException: Gọi phương thức trong trạng thái không hợp lệ.
↳ IndexOutOfBoundsException: Lỗi truy cập chỉ số ngoài phạm vi (chung hơn ArrayIndexOutOfBoundsException).
↳ UnsupportedOperationException: Thao tác không được hỗ trợ.
↳ NumberFormatException: Lỗi chuyển đổi chuỗi thành số..
Ngoại lệ khác
↳ CloneNotSupportedException: Liên quan đến việc sao chép đối tượng.
Dưới đây là sơ đồ cây ngoại lệ lớp con RuntimeException kế thừa trực tiếp từ lớp Exception trong Java:
├──Exception
│ └──RuntimeException (Unchecked exception)
│ │ ├── ArithmeticException
│ │ ├── ArrayIndexOutOfBoundsException
│ │ ├── ArrayStoreException
│ │ ├── ClassCastException
│ │ ├── ConcurrentModificationException
│ │ ├── IllegalArgumentException
│ │ │ └── NumberFormatException
│ │ ├── IllegalMonitorStateException
│ │ ├── IllegalStateException
│ │ ├── IllegalThreadStateException
│ │ ├── IndexOutOfBoundsException
│ │ │ └── StringIndexOutOfBoundsException
│ │ ├── NegativeArraySizeException
│ │ ├── NullPointerException
│ │ ├── SecurityException
│ │ ├── UnsupportedOperationException
│ │ ├── BrokenBarrierException (Lập trình đa luồng)
│ │ ├── CloneNotSupportedException (Lỗi lập trình)
│ │ ├── IllegalClassFormatException (Lỗi lập trình)
│ │ ├── ReflectiveOperationException (Lỗi lập trình)
│ │ │ └── NoSuchMethodException (Lỗi lập trình)
│ │ │ └── InstantiationException (Lỗi lập trình)
│ │ ├── MissingResourceException
│ │ ├── EmptyStackException
│ │ ├── SecurityException
Việc hiểu rõ các ngoại lệ này sẽ giúp bạn sử dụng và tạo ngoại lệ tùy chỉnh một cách chính xác trong Java.