Java: Bắt hoặc chỉ định yêu cầu

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Mã lệnh của ngôn ngữ lập trình Java hợp lệ là mã lệnh phải tôn trọng việc Bắt hoặc chỉ định yêu cầu. Điều này có nghĩa rằng mã mà có thể ném các ngoại lệ nhất định phải được đi kèm theo một trong những điều sau đây:

Đoạn mã mà không tôn trọng việc bắt hoặc chỉ định yêu cầu thì được coi là không hoàn chỉnh.

Không phải tất cả các ngoại lệ đều thuộc diện bắt hoặc chỉ định yêu cầu. Để hiểu tại sao, ta cần phải xem xét ba loại ngoại lệ cơ bản sau đây, chỉ có một trong số đó là phụ thuộc vào yêu cầu.

Ba loại ngoại lệ

Ngoại lệ kiểm tra (checked exception)

Loại đầu tiên của ngoại lệ là ngoại lệ kiểm tra (checked exception). Đây là trường hợp trong đó một ứng dụng được viết tốt nên được dự đoán và phục hồi. Ví dụ, giả sử một ứng dụng sẽ nhắc người dùng cho một tên tập tin đầu vào, sau đó sẽ mở tập tin bằng cách thông qua tên để thiết lập hàm tạo cho java.io.FileReader. Thông thường, người sử dụng cung cấp tên của một file có thể đọc, do đó việc xây dựng đối tượng FileReader là thành công, và sự thực thi của ứng dụng được tiến hành bình thường. Nhưng đôi khi người dùng cung cấp tên của một tập tin không tồn tại, và hàm tạo sẽ ném ra ngoại lệ java.io.FileNotFoundException. Một chương trình được viết tốt sẽ bắt ngoại lệ này và thông báo cho người sử dụng rằng có lỗi xảy ra.

Ngoại lệ kiểm tra là đối tượng để bắt hoặc chỉ định yêu cầu. Tất cả các trường hợp ngoại lệ đều là ngoại lệ kiểm tra, ngoại trừ những ngoại lệ được chỉ định bởi Error, RuntimeException và các lớp con của chúng.

Lỗi (Error)

Loại ngoại lệ thứ hai là lỗi (error). Lỗi nằm bên ngoài ứng dụng, và ứng dụng thường không thể được dự đoán hoặc phục hồi. Ví dụ, giả sử rằng một ứng dụng mở thành công một tập tin cho cho việc nhập liệu, nhưng không thể đọc được nó do phần cứng hoặc hệ thống bị trục trặc. Điều này sẽ ném ra một ngoại lệ là java.io.IOError. Một ứng dụng có thể lựa chọn để bắt ngoại lệ này, để thông báo cho người sử dụng vấn đề - nhưng nó cũng có thể làm cho chương trình hiểu là cần in một stack trace (dấu ngăn xếp) và thoát.

Lỗi (Error) không thuộc loại bắt hoặc chỉ định yêu cầu. Lỗi thuộc vào loại ngoại lệ được chỉ định bởi Error và các lớp con của nó.

Ngoại lệ thời gian chạy (runtime exception)

Loại ngoại lệ thứ ba là ngoại lệ thời gian chạy (runtime exception). Đây là loại ngoại lệ xảy ra bên trong ứng dụng, và các ứng dụng thường không thể dự đoán hoặc phục hồi. Những ngoại lệ dạng này thường chỉ ra lỗi lập trình, chẳng hạn như các lỗi logic hoặc sử dụng không đúng một API nào đó. Ví dụ, xét ứng dụng được mô tả ở trên với việc truyền tên tập tin tới hàm tạo của FileReader. Nếu một lỗi logic gây ra null được truyền tới hàm tạo thì hàm tạo sẽ ném ngoại lệ NullPointerException. Ứng dụng có thể bắt ngoại lệ này, nhưng sẽ ý nghĩa hơn nếu loại bỏ được các lỗi gây ra ngoại lệ này.

Ngoại lệ runtime không áp dụng được việc bắt hoặc chỉ định yêu cầu. Nó thường được chỉ định bởi RuntimeException và các lớp con của nó.

Lỗi và ngoại lệ thời gian chạy được gọi chung là ngoại lệ không kiểm soát được (unchecked exception).

Bỏ qua việc bắt hoặc chỉ định

Một số lập trình viên coi ngoại lệ checked là một lỗ hổng nghiêm trọng trong cơ chế ngoại lệ và bỏ qua nó bằng cách sử dụng các ngoại lệ unchecked thay thế. Nói chung, điều này là không nên. Bài viết Ngoại lệ unchecked - Tranh luận sẽ cho ta biết khi nào thì nên sử dụng ngoại lệ unchecked.

» Tiếp: Khối try
« Trước: Ngoại lệ là gì?
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!