Việc xử lý ngoại lệ trong Java là một trong những cơ chế mạnh mẽ để xử lý các lỗi cụ thể phát sinh trong chuỗi mã khi chạy. Một ngoại lệ là không có gì ngoài lỗi thời gian chạy làm gián đoạn dòng chảy bình thường của ứng dụng.
Nó thường xảy ra trong một đoạn mã và khi có, một đối tượng đại diện cho ngoại lệ đó được tạo và ném trong phương pháp gây ra nó. Do đó, chương trình hoặc ứng dụng bị gián đoạn khiến ứng dụng chấm dứt bất thường, điều này không được khuyến khích. Đây là lý do tại sao các ngoại lệ này phải được xử lý và đây là lúc cơ chế xử lý ngoại lệ xuất hiện.
Có hai loại ngoại lệ tồn tại trong Java - Ngoại lệ được kiểm tra và không được kiểm tra. Trong bài viết này, chúng tôi sẽ thảo luận chi tiết về những gì được kiểm tra và không được kiểm tra ngoại lệ và khi nào sử dụng chúng, và cuối cùng, chúng ta sẽ thấy sự khác biệt giữa hai.
Đây là những ngoại lệ được kiểm tra và xử lý tại thời điểm biên dịch. Java định nghĩa một số lớp ngoại lệ bên trong gói tiêu chuẩn java.lang, và các ngoại lệ phổ biến nhất là các lớp con của loại tiêu chuẩn RuntimeException.
Những ngoại lệ xảy ra trong các khu vực nằm ngoài sự kiểm soát ngay lập tức của chương trình được gọi là các ngoại lệ được kiểm tra. Nếu một phương pháp ném một ngoại lệ được kiểm tra tại thời điểm biên dịch không thể tự xử lý, sau đó nó phải xử lý ngoại lệ đó trong một nắm lấy chặn hoặc khai báo ngoại lệ bằng cách sử dụng ném từ khóa, nếu không nó sẽ đưa ra một lỗi biên dịch. Trình biên dịch kiểm tra loại đối tượng ngoại lệ cho mỗi phi câu lệnh và nếu nó hiển thị được kiểm tra, trình biên dịch sẽ kiểm tra mã nguồn để đảm bảo ngoại lệ được xử lý trong phương thức mà nó được ném hoặc được khai báo để có thể xử lý thêm.
Tất cả các ngoại lệ được mô tả bởi ngoại lệ đó là các lớp con trực tiếp của nó ngoại trừ RuntimeException được gọi là ngoại lệ được kiểm tra. Bây giờ khi nào nên sử dụng ngoại lệ được kiểm tra? Bạn có thể chọn sử dụng một ngoại lệ được kiểm tra khi bạn biết chính xác phải làm gì khi ngoại lệ xảy ra hoặc khi cơ hội thất bại nhiều hơn. Một số ví dụ về các ngoại lệ được kiểm tra trong thư viện Java bao gồm IOException, DataAccessException, IllegalAccessException, InterruptedException, ClassNotFoundException, InvocationTargetException, v.v..
Đây là những ngoại lệ không được kiểm tra tại thời điểm biên dịch. Ngoại lệ không được kiểm tra biểu thị một điều kiện thường phản ánh các lỗi trong logic của chương trình và không thể được phục hồi khi chạy.
Nói một cách đơn giản, ngoại lệ không được kiểm tra là một ngoại lệ không bị bắt trong cố gắng bắt khối. Họ không cần phải bị bắt một cách rõ ràng. Trong thực tế, khi một ngoại lệ không được kiểm soát xảy ra, Java sẽ tự động xử lý ngoại lệ đó. Các trường hợp ngoại lệ không được kiểm tra hầu hết xảy ra do lỗi lập trình, chẳng hạn như khi truy cập phần tử bên ngoài một liên kết mảng hoặc phương thức truy cập của một đối tượng null. Trong Java, tất cả các ngoại lệ dưới dạng ném được đều là các ngoại lệ được kiểm tra, trong khi các ngoại lệ là các lớp con trực tiếp của lỗi và RuntimeException là những ngoại lệ không được kiểm tra.
Phần tốt nhất của một ngoại lệ không được kiểm tra là nó không làm giảm khả năng đọc mã trong khi giữ cho mã máy khách sạch sẽ. Một số ví dụ về các trường hợp ngoại lệ không được kiểm tra bao gồm ArithaturesException, ClassCastException, NullPulumException, ArrayIndexOutOfBound, IllegalArgumentException, IllegalStateException, ArrayStoreException, SecurityException, v.v..
Ngoại lệ được kiểm tra và không được kiểm tra là hai loại ngoại lệ tồn tại trong Java để đảm bảo luồng ứng dụng bình thường. Cả hai đều phục vụ cùng một mục đích là xử lý các ngoại lệ trong Java và mặc dù không có sự khác biệt về chức năng, không có quy tắc duy nhất để xác định khi nào nên sử dụng kiểm tra và khi nào nên sử dụng ngoại lệ không được kiểm tra. Ngoại lệ được kiểm tra là một ngoại lệ được kiểm tra tại thời điểm biên dịch, trong khi Ngoại lệ không được kiểm tra là ngoại lệ không được kiểm tra tại thời điểm biên dịch.
Một ngoại lệ được kiểm tra đề cập đến các kịch bản không hợp lệ xảy ra ngoài sự kiểm soát ngay lập tức của chương trình trong khi ngoại lệ không được kiểm tra đề cập đến các lỗi trong chương trình hoặc các lỗi trong logic của chương trình không thể được phục hồi khi chạy.
Nếu một phương thức ném một ngoại lệ được kiểm tra, trình biên dịch sẽ kiểm tra xem phương thức đó có xử lý ngoại lệ đó bằng cách sử dụng khối try-Catch hay chỉ định ngoại lệ bằng cách sử dụng từ khóa throws. Nếu phương thức không cung cấp mã xử lý, nó sẽ hiển thị lỗi biên dịch. Ngược lại, chương trình biên dịch tốt vì trình biên dịch không kiểm tra Ngoại lệ không được kiểm tra tại thời điểm biên dịch.
Các ngoại lệ không xuất phát từ RunTimeException thường được xử lý trong khi các ngoại lệ xảy ra trong thời gian chạy hiếm khi được xử lý. Một ngoại lệ được kiểm tra xảy ra khi cơ hội thất bại quá cao. Mặt khác, không được kiểm tra Ngoại lệ xảy ra chủ yếu là do lỗi lập trình. Tất cả các ngoại lệ trong các lớp RuntimeException và Error đều là các ngoại lệ không được kiểm tra, trong khi mọi thứ khác có thể ném được đều được kiểm tra ngoại lệ.
Một số ví dụ về các ngoại lệ được kiểm tra là IOException, DataAccessException, IllegalAccessException, InterruptedException, ClassNotFoundException, v.v. Ví dụ về các trường hợp ngoại lệ không được kiểm tra bao gồm NullPulumException, ArithaturesException, ArrayIndexOutOfBound, IllegalArgumentException, IllegalStateException, ArrayStoreException, SecurityException, v.v..
Ngoại lệ được kiểm tra và không được kiểm tra là hai loại ngoại lệ tồn tại trong Java. Mặc dù chức năng là giống nhau cho cả hai trường hợp ngoại lệ, chúng có phần khác biệt. Sự khác biệt chính giữa các ngoại lệ được kiểm tra và không được kiểm tra là cái trước được kiểm tra bởi trình biên dịch trong khi cái sau thoát khỏi thông báo của trình biên dịch. Các ngoại lệ được kiểm tra và xử lý tại thời điểm biên dịch là các ngoại lệ được kiểm tra, trong khi các ngoại lệ không được kiểm tra và xử lý tại thời điểm biên dịch là các ngoại lệ không được kiểm tra. Bài viết này giải thích những gì được kiểm tra và những gì là ngoại lệ không được kiểm tra, khi nào nên sử dụng chúng và giải thích sự khác biệt giữa hai.