Ngoại lệ thường được kiểm tra khi người nhận có thể/nên thực hiện một số hành động có ý nghĩa để khắc phục sự cố trong thời gian chạy.
Unchecked Exceptions — The Controversy nói:
Đây là dòng hướng dẫn phía dưới: Nếu một khách hàng một cách hợp lý có thể được dự kiến sẽ phục hồi từ một ngoại lệ, làm cho nó một ngoại lệ kiểm tra. Nếu một khách hàng không thể làm bất cứ điều gì để phục hồi từ các trường hợp ngoại lệ, làm cho nó một ngoại lệ không được kiểm soát.
Nguồn phổ biến nhất của ClassNotFoundException
s là mã như
classLoader.loadClass(className);
rằng phản tư tải một lớp dựa trên một tên được tìm thấy trong một tập tin cấu hình, đầu vào tuần tự, hoặc gọi thủ tục từ xa.
Điều này trái ngược với ClassNotFoundError
thường xuất phát từ chương trình tĩnh được biên dịch với các lớp khác mà trình liên kết của JVM không thể tìm thấy khi chạy.
gì phân biệt các trường hợp phản sử dụng (kiểm tra) từ một thất bại để liên kết tĩnh mã biên dịch (lỗi runtime)?
Context
phản quang: Người gọi biết nơi chuỗi từ và lý do tại sao tải đã được thực hiện.
Tĩnh: Người gọi chỉ đang cố gắng sử dụng một lớp đã có sẵn tại thời gian biên dịch. Không có ngữ cảnh nào.
Khôi phục
Phản xạ: Người gọi có thể không thực hiện được hoặc thử chiến lược mặc định.
Tĩnh: Ngôn ngữ Java không hỗ trợ rõ ràng việc thay thế các điểm liên kết khác nhau.
rephrasing
phản quang: Caller thường nên chuyển đổi lỗi cho một loại khác nhau, như
một IOException
về thất bại để deserialize.
Tĩnh: Nếu một phần của chương trình bị thiếu, bạn không thể dựa vào phần cần thiết của chương trình để giải thích tại sao một phần bị thiếu cho các phần khác.
IMHO sai lầm lớn nhất đã làm 'SQLException' kiểm tra. – Bohemian
@Bohemian - Xem điểm bullet đầu tiên của tôi :-) –
Tôi sẽ đi ra ngoài một chi và nói rằng đó là một thực tế trong trường hợp này. Khi bạn nhìn vào mã sử dụng JDBC, nó sẽ có các khối try-catch không bao giờ được sử dụng. Không bao giờ. Khi bạn có nhiều mã chiếu lệ, bạn biết bạn đã tạo ra một thiết kế giả mạo. – Bohemian