Theo 11.1.1. các loại Exceptions
Một ngoại lệ được đại diện bởi một thể hiện của lớp Throwable (một lớp con trực tiếp của đối tượng) hoặc một trong các lớp con của nó.
Có thể ném và tất cả các lớp con của nó là các lớp ngoại lệ.
Lưu ý rằng một phân lớp của Throwable không được chung chung (§8.1.2).
Các lớp Ngoại lệ và Lỗi là các lớp con trực tiếp của Throwable.
Ngoại lệ là siêu lớp của tất cả các ngoại lệ mà từ đó các chương trình thông thường có thể muốn khôi phục.
Lỗi là siêu lớp của tất cả các ngoại lệ mà từ đó các chương trình thông thường thường không được khôi phục.
Lỗi và tất cả các lớp con của nó là các lớp lỗi.
Lỗi lớp là lớp con riêng biệt của Throwable, khác biệt với Ngoại lệ trong phân cấp lớp, cho phép chương trình sử dụng thành ngữ "} catch (Exception e) {" (§11.2.3) để nắm bắt tất cả các ngoại lệ phục hồi có thể được thực hiện mà không bị bắt lỗi mà từ đó phục hồi thường là không thể.
Lớp RuntimeException là một lớp con trực tiếp của Ngoại lệ. RuntimeException là siêu lớp của tất cả các ngoại lệ có thể được ném vì nhiều lý do trong quá trình đánh giá biểu thức, nhưng từ đó có thể vẫn có thể phục hồi.
RuntimeException và tất cả các lớp con của nó là các lớp ngoại lệ chạy theo thời gian.
Các lớp ngoại lệ không được chọn là các lớp ngoại lệ thời gian chạy và các lớp lỗi.
Các lớp ngoại lệ đã chọn là tất cả các lớp ngoại lệ ngoại trừ các lớp ngoại lệ không được chọn. Đó là, các lớp ngoại lệ được kiểm tra là tất cả các lớp con của Throwable ngoài RuntimeException và các lớp con của nó và Error và các lớp con của nó.
lý do tại sao chúng tôi không thể kiểm tra ngoại lệ thời gian chạy? như chúng ta biết có thể là một NullPointerException thì chúng ta nên kiểm tra nó. bất kỳ ý tưởng? – UnKnown
@ UnKnown: Không, bạn không muốn mọi phương thức bạn từng viết để bắt hoặc khai báo NullPointerException ... Điều đó thật khủng khiếp. –
nó có nghĩa là khái niệm không có sự khác biệt giữa các trường hợp ngoại lệ đã kiểm tra và không được kiểm tra? chỉ cần thực hiện làm cho sự khác biệt? – UnKnown