Trong Java, xử lý ngoại lệ là một trong những phương pháp hiệu quả để xử lý các lỗi thời gian chạy để đảm bảo luồng thông thường của ứng dụng được duy trì. Xử lý ngoại lệ trong Java là cơ chế để xử lý các lỗi thời gian chạy như ClassNotFoundException, IOException, SQLException, RemoteException, v.v.
Các loại ngoại lệ trong Java
Java định nghĩa nhiều loại ngoại lệ liên quan đến các thư viện lớp khác nhau của nó. Ngoài ra, Java cũng cho phép người dùng tự định nghĩa các ngoại lệ riêng của họ.
Chú thích: Hình ảnh minh họa về các loại ngoại lệ trong Java
1. Các ngoại lệ được tích hợp sẵn
Các ngoại lệ được tích hợp sẵn là các ngoại lệ có sẵn trong thư viện Java. Những ngoại lệ này phù hợp để giải thích các tình huống lỗi cụ thể.
- Ngoại lệ kiểm tra (Checked Exception): Các ngoại lệ kiểm tra được gọi là các ngoại lệ kiểm tra thời gian biên dịch vì các ngoại lệ này được kiểm tra tại thời điểm biên dịch bởi trình biên dịch.
- Ngoại lệ không kiểm tra (Unchecked Exception): Các ngoại lệ không kiểm tra là đối lập với các ngoại lệ kiểm tra. Trình biên dịch sẽ không kiểm tra các ngoại lệ này tại thời điểm biên dịch. Nó có nghĩa là nếu một chương trình tạo ra một ngoại lệ không kiểm tra và ngay cả khi chúng ta không xử lý hoặc khai báo nó, chương trình sẽ không báo lỗi biên dịch.
2. Các ngoại lệ do người dùng tự định nghĩa
Đôi khi, các ngoại lệ tích hợp sẵn trong Java không thể mô tả một tình huống cụ thể. Trong những trường hợp như vậy, người dùng cũng có thể tạo ra các ngoại lệ riêng của mình, được gọi là 'ngoại lệ do người dùng tự định nghĩa'.
Lợi ích của xử lý ngoại lệ trong Java
Xử lý ngoại lệ trong Java mang lại những lợi ích sau:
- Cung cấp khả năng hoàn thiện việc thực thi chương trình.
- Dễ nhận biết mã chương trình và mã xử lý lỗi.
- Lan truyền lỗi.
- Báo cáo lỗi có ý nghĩa.
- Xác định các loại lỗi.
Cách JVM xử lý một ngoại lệ
Xử lý ngoại lệ mặc định
Khi một ngoại lệ xảy ra trong một phương thức, phương thức tạo ra một đối tượng được gọi là đối tượng ngoại lệ và truyền nó cho hệ thống thực thi (JVM). Đối tượng ngoại lệ chứa thông tin về ngoại lệ, chẳng hạn như tên và mô tả của ngoại lệ và trạng thái của chương trình khi ngoại lệ xảy ra.
Cách tạo đối tượng ngoại lệ và xử lý nó trong hệ thống thực thi được gọi là ném ra ngoại lệ. Có thể có một danh sách các phương thức đã được gọi để đến phương thức mà một ngoại lệ xảy ra. Danh sách phương thức này được gọi là ngăn xếp cuộc gọi.
Cách xử lý một ngoại lệ trong JVM như sau:
- Hệ thống thực thi tìm kiếm ngăn xếp cuộc gọi để tìm phương thức chứa một khối mã có thể xử lý ngoại lệ. Khối mã này được gọi là bộ xử lý ngoại lệ.
- Hệ thống thực thi bắt đầu tìm kiếm từ phương thức mà ngoại lệ xảy ra và tiếp tục qua ngăn xếp cuộc gọi theo thứ tự ngược với thứ tự các phương thức đã được gọi.
- Nếu nó tìm thấy một bộ xử lý phù hợp, hệ thống thực thi truyền đối tượng ngoại lệ đã xảy ra cho nó. Một bộ xử lý phù hợp nghĩa là loại đối tượng ngoại lệ ném ra khớp với loại đối tượng ngoại lệ mà nó có thể xử lý.
- Nếu hệ thống thực thi tìm kiếm tất cả các phương thức trên ngăn xếp cuộc gọi và không tìm thấy bộ xử lý phù hợp, hệ thống thực thi giao ngoại lệ cho bộ xử lý ngoại lệ mặc định, là một phần của hệ thống thực thi. Bộ xử lý này in thông tin về ngoại lệ theo định dạng sau đây và kết thúc chương trình một cách không bình thường.
Chú thích: Sơ đồ minh họa quá trình xử lý ngăn xếp cuộc gọi cho các ngoại lệ trong Java
Kết luận
Xử lý ngoại lệ trong Java là một phương pháp quan trọng để xử lý lỗi thời gian chạy. Nó giúp duy trì luồng thông thường của ứng dụng và cung cấp khả năng xử lý lỗi hiệu quả. Java có nhiều loại ngoại lệ khác nhau, bao gồm các ngoại lệ tích hợp sẵn và ngoại lệ do người dùng tự định nghĩa. Quá trình xử lý ngoại lệ trong JVM đảm bảo tìm kiếm và chuyển đối tượng ngoại lệ cho bộ xử lý phù hợp, và nếu không tìm thấy, nó sẽ được chuyển cho bộ xử lý ngoại lệ mặc định.
Liên quan:
- Các loại ngoại lệ trong Java
- Ngoại lệ kiểm tra so với ngoại lệ không kiểm tra
- Throw-Throws trong Java
Các khóa học liên quan:
- Khóa học Cơ bản về Lập trình Java - Tự học theo tốc độ của bạn: Tìm khóa học phù hợp để bắt đầu học Lập trình Java từ các chuyên gia trong ngành với nhiều năm kinh nghiệm. Khóa học này bao gồm các kiến thức cơ bản về ngôn ngữ lập trình Java, kiểu dữ liệu, toán tử và điều khiển luồng, vòng lặp, chuỗi và nhiều hơn nữa. Không cần chờ đợi nữa! Bắt đầu học ngay Java ngay bây giờ và trở thành một Kỹ sư Java đầy đủ!