Các loại ngoại lệ (exceptions) trong Java

Đây là bài 39/62 bài của series môn học Ngôn ngữ lập trình Java

1. Ngoại lệ (exceptions) trong Java là gì?

Một ngoại lệ (exception) là một sự kiện bất ngờ xảy ra trong quá trình thực thi chương trình. Nó có thể khiến chương trình kết thúc bất thường. Có nhiều nguyên nhân gây ra ngoại lệ như:

    • Người dùng nhập dữ liệu không hợp lệ
    • Lỗi thiết bị
    • Mất kết nối mạng
    • Giới hạn về phần cứng, có thể là hết bộ nhớ
    • Lỗi code
    • Mở file không hợp lệ

Bên dưới là một sơ đồ đơn giản của hệ thống phân cấp ngoại lệ trong Java.

Exception Hierarchy in Java

Lớp Throwable là lớp gốc (root) của hệ thống phân cấp trên. Hệ thống phân cấp này chia thành 2 nhánh: Error Exception.

Error kế thừa Throwable

Các error là các tình trạng bất thường, ảnh hưởng nghiêm trọng đến chương trình. Khi lỗi xảy ra thì gần như không thể khôi phục chương trình như máy ảo Java (JVM) hết bộ nhớ, lỗi tràn ngăn xếp, không tương thích thư viện, đệ quy vô hạn,…

Error thường nằm ngoài tầm kiểm soát của lập trình viên. Nhưng chúng ta cũng phải cố gắng hiểu chúng là lỗi gì và giải quyết như thế nào.

Một vài lớp con của lớp Error như:

    • AnnotationFormatError xuất ra lỗi cho biết định dạng annotation không đúng.
    • LinkageError xuất ra lỗi khi một lớp phụ thuộc vào một số lớp khác nhưng những lớp này đã bị thay đổi, không còn tương thích nữa. Lỗi này thường xảy ra do sự thay đổi version của các thư viện trong Java.
    • VirtualMachineError xuất ra lỗi khi Java Virtual Machine (JVM) gặp trục trặc hoặc hết tài nguyên phần cứng để hoạt động.
Ví dụ một vài error được xuất ra màn hình của lớp Error
Error: LinkageError occurred while loading main class ClassName
    java.lang.UnsupportedClassVersionError: ClassName has been 
    compiled by a more recent version of the Java Runtime 
    (class file version 55.0), this version of the Java Runtime 
    only recognizes class file versions up to 54.0
java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.cassandra.repository.config.EnableCassandraRepositories.repositoryBaseClass()
java.lang.OutOfMemoryError: Java heap space
Exception in thread "main" java.lang.StackOverflowError

Exception kế thừa Throwable

Chương trình Java có thể phát hiện và xử lý được exception. Khi một ngoại lệ xảy ra trong một phương thức, nó sẽ tạo ra một đối tượng. Đối tượng này được gọi là exception object. Nó chứa thông tin về exception như tên và mô tả của exception và trạng thái của chương trình khi exception xảy ra.

Trong cây phân cấp, Exception gồm 2 nhánh: RuntimeException IOException.

2. RuntimeException

Một runtime exception xảy ra bởi một lỗi lập trình (programming error). Runtime exception còn được gọi là unchecked exception.

Runtime exception không được kiểm tra lúc biên dịch nhưng được phát hiện lúc thực thi (runtime). Một vài runtime exception phổ biến như:

    • IllegalArgumentException lỗi xảy ra khi truyền đối số không phù hợp cho phương thức
    • NullPointerException lỗi truy cập con trỏ rỗng
    • ArrayIndexOutOfBoundsException lỗi truy cập index của các phần tử không thuộc mảng
    • ArithmeticException lỗi chia cho số 0

Những lỗi này đều là lỗi của lập trình viên. Ví dụ, NullPointerException sẽ không xảy ra nếu chúng ta kiểm tra biến được khởi tạo hay chưa trước khi sử dụng. ArrayIndexOutOfBoundsException sẽ không xảy ra nếu chúng ta kiểm tra phạm vi index của các phần tử trong mảng.

Ví dụ một vài error được xuất ra màn hình của RuntimeException

java.lang.IllegalArgumentException: adding container's parent to itself
java.lang.NullPointerException
at twoten.TwoTenB.<init>(TwoTenB.java:29)
at javapractice.JavaPractice.main(JavaPractice.java:32)
Java Result: 1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
Exception in thread "main" java.lang.ArithmeticException: / by zero

3. IOException

Một IOException còn được gọi là checked exception. Chúng được trình biên dịch kiểm tra tại thời điểm biên dịch và lập trình viên được yêu cầu xử lý các ngoại lệ này.

Một số IOException phổ biến là:

    • FileNotFoundException lỗi mở một file không tồn tại
    • Lỗi đọc các dòng không có trong file

Ví dụ một vài error được xuất ra màn hình của IOException

Exception in thread "main" java.io.FileNotFoundException: file.txt (The system cannot find the file specified)
Exception in thread "main" java.io.IOException: Cannot run program "": error=2, No such a file or directory.

Ở bài này, chúng ta đã tìm hiểu các loại ngoại lệ (exception) trong Java. Chúng ta sẽ tìm hiểu cách xử lý ngoại lệ (exception) ở bài Cách xử lý ngoại lệ (exceptions) trong Java.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Kiểu dữ liệu enum trong JavaCách xử lý ngoại lệ (exceptions) trong Java >>
Chia sẻ trên mạng xã hội:

Để lại một bình luận

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.