Không nhất thiết phải có khối try/catch
cho trường hợp ngoại lệ của bạn. Thay vào đó, bạn có thể throw
họ cho người có thể xử lý ngoại lệ đúng cách.
Có 2 loại ngoại lệ: Đã chọn và Bỏ chọn. Một ngoại lệ được kiểm tra có thể được coi là được trình biên dịch tìm thấy và trình biên dịch biết rằng nó có cơ hội xảy ra, vì vậy bạn cần phải catch
hoặc throw
nó. Ví dụ, mở một tập tin. Nó có cơ hội thất bại, và trình biên dịch biết điều này, vì vậy bạn buộc phải catch
hoặc throw
khả năng IOException
.
Ngoại lệ không được kiểm tra có thể được coi là một cơ hội có khả năng xảy ra, nhưng dựa trên mã của bạn, trình biên dịch không biết. Nói cách khác, đó là lỗi lập trình . Ví dụ: nếu bạn đang sử dụng dữ liệu nhập của người dùng và mong đợi một số và người dùng nhập nội dung bạn không mong đợi, chẳng hạn như chuỗi, chương trình của bạn sẽ ném một số NumberFormatException
. Bạn có thể dự đoán các tình huống này và đặt try/catch
để thử và tránh chúng trước khi chúng xảy ra. Rất hiếm khi nhìn thấy là một người thêm một số throws NullPointerException
hoặc throws NumberFormatException
(hoặc ném bất kỳ ngoại lệ không được kiểm soát nào khác, cho vấn đề đó). Nó được cho phép, nhưng rõ ràng tạo ra ngoại lệ đó là lạ và hầu hết mọi người sẽ nói rằng đó là phong cách mã hóa xấu.
Lưu ý rằng tất cả các đề xuất Đã kiểm tra phải bị bắt hoặc bị ném vào thứ có thể xử lý; nếu bạn không làm điều đó, chương trình của bạn sẽ không biên dịch. Nếu bạn ném nó vào một cái gì đó mà không thể xử lý nó, sau đó chương trình của bạn sẽ có khả năng sụp đổ nếu nó xảy ra.
Cũng lưu ý rằng Ngoại lệ không được kiểm tra (ví dụ: một trong những xảy ra trong thời gian chạy, thường qua đầu vào người dùng xấu hoặc không có điều gì) cũng thường sẽ làm hỏng chương trình của bạn. Do đó, bạn nên sử dụng try/catch
khi có điều gì đó có thể xảy ra sai, nhưng bạn không phải. Cũng cần lưu ý rằng trong khi các ngoại lệ được kiểm tra là các lớp con của ngoại lệ ngoại lệ và không được kiểm tra là các lớp con của RuntimeException, thì chính RuntimeException là một lớp con của Ngoại lệ. Điều đó có nghĩa rằng nếu bạn thực sự muốn, một đơn try {} catch (Exception e) {}
sẽ bắt mọi ngoại lệ duy nhất mà chương trình của bạn có thể ném. Cấp, điều này được coi là một cách khủng khiếp để đối phó với trường hợp ngoại lệ, và bạn nên bắt mỗi một cách riêng biệt để bạn có thể xử lý chúng một cách riêng biệt. Hãy cố gắng không sử dụng nó.
Câu trả lời khác nhau. – Youri
Bạn có thể làm rõ thêm một chút không. – Blip
Đọc tại đây [Ngoại lệ oracle doc] https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html –