Tôi sẽ cho bạn một ví dụ đầu tiên (nhưng cuối cùng là câu trả lời tại sao tranh cãi).
Giả sử bạn đang chỉnh sửa tài liệu trong trình chỉnh sửa tài liệu dựa trên Java và sau khi hoàn tất, bạn chọn Tệp-> Lưu dưới dạng ... và bạn đã chọn lưu tài liệu vào ổ đĩa mà bạn không có quyền ghi. Trình chỉnh sửa sẽ không gây ra lỗi cho bạn với một ngăn xếp xấu xí, nó sẽ đơn giản cho bạn biết rằng nó không thể lưu tệp và nó sẽ cho phép bạn tiếp tục chỉnh sửa và / hoặc lưu vào một vị trí khác.
Trong trường hợp như vậy, có lẽ một ngoại lệ đã được kiểm tra đã được mong đợi, bị bắt và hành động để phục hồi một cách ân cần từ nó.
Mặt khác, cung cấp cho các phép chia này bằng 0 hoặc ngoại lệ con trỏ null do lỗi lập trình gây ra cho cái đầu xấu xí của nó chỉ trong một số điều kiện nhất định. Điều đó có thể xảy ra ở bất cứ đâu trong mã, RAM có thể bị hỏng, v.v. Không tài liệu API nào sẽ cho bạn biết "phương pháp này sẽ ném một số chia cho 0 nếu RAM bị hỏng" .
Các ngoại lệ được kiểm tra phải là một phần của thiết kế và người dùng API đó nên chuẩn bị để xử lý chúng. Các ngoại lệ không được kiểm soát có thể xảy ra ở hầu hết mọi nơi và nằm ngoài tầm kiểm soát của chúng tôi.
Tranh cãi nảy sinh từ các lập trình viên sử dụng các ngoại lệ không được kiểm tra (mở rộng từ RuntimeException) khi họ nên sử dụng các ngoại lệ được kiểm tra:
- như một shorcut không bị làm phiền bởi trình biên dịch
- để làm cho chữ ký của họ trông đơn giản hơn
- bởi vì họ cho rằng các ngoại lệ được kiểm tra là một vấn đề phụ thuộc (nếu bạn ném một ngoại lệ được kiểm tra mới trong một lớp triển khai, bạn nên sửa đổi chữ ký của giao diện) và ngược lại.