Java: Tạo lớp ngoại lệ
Khi phải đối mặt với việc lựa chọn loại ngoại lệ để ném, bạn có thể sử dụng ngoại lệ được viết bởi một người khác - nền tảng Java cung cấp rất nhiều lớp ngoại lệ mà bạn có thể sử dụng - hoặc bạn có thể tạo lớp ngoại lệ cho riêng bạn. Bạn nên viết các lớp ngoại lệ của riêng bạn nếu bạn trả lời là "có" cho bất kỳ câu hỏi nào sau đây; nếu không, bạn có thể có thể sử dụng của người khác.
- Bạn có cần một loại ngoại lệ mà không được đại diện bởi chúng trong nền tảng Java?
- Nó sẽ giúp người dùng nếu họ có thể phân biệt ngoại lệ của bạn được ném ra bởi các lớp được viết bởi các nhà cung cấp khác?
- Liệu mã lệnh của bạn có ném nhiều hơn một ngoại lệ liên quan?
- Nếu bạn sử dụng ngoại lệ của người khác, người dùng sẽ có quyền truy cập vào những ngoại lệ này không? Câu hỏi tương tự là, gói của bạn nên được độc lập và khép kín không?
Một ví dụ
Giả sử bạn đang viết một lớp danh sách liên kết. Lớp hỗ trợ các phương thức sau đây, cùng với những phương thức khác:
objectAt(int n)
- Trả về đối tượng ở vị trí thứn
trong danh sách. Ném một ngoại lệ nếu đối số là nhỏ hơn 0 hoặc nhiều hơn số lượng các đối tượng hiện có trong danh sách.firstObject()
- Trả về đối tượng đầu tiên trong danh sách. Ném một ngoại lệ nếu danh sách không chứa đối tượng.indexOf(Object o)
- Tìm kiếm trong danh sáchObject
cụ thể và trả về vị trí của nó trong danh sách. Ném một ngoại lệ nếu đối tượng được truyền vào phương thức không có trong danh sách.
Lớp danh sách liên kết có thể ném nhiều ngoại lệ, và sẽ thuận tiện để có thể bắt tất cả các ngoại lệ được ném ra bởi danh sách liên kết với một trình xử lý ngoại lệ. Ngoài ra, nếu bạn có kế hoạch phân tán các danh sách liên kết của bạn trong một gói, thì tất cả các mã liên quan nên được đóng gói cùng nhau. Như vậy, danh sách liên kết nên cung cấp tập các lớp ngoại lệ của chính bản thân nó.
Hình sau đây minh họa một hệ thống phân cấp lớp có thể cho các ngoại lệ được ném ra bởi danh sách liên kết.
Ví dụ về hệ thống phân cấp lớp ngoại lệ.
Chọn một lớp cha
Bất kỳ lớp con nào của Exception
đều có thể được sử dụng như là lớp cha của LinkedListException
. Tuy nhiên, quan sát nhanh những lớp con có thể thấy rằng chúng không phù hợp bởi vì chúng hoặc là quá chuyên nghiệp hoặc hoàn toàn không liên quan đến LinkedListException
. Do đó, lớp cha của LinkedListException
nên là Exception
.
Hầu hết các applet và các ứng dụng bạn viết sẽ ném các đối tượng các ngoại lệ dạng Exception
. Các lỗi Error
thường được sử dụng cho những lỗi nguy hiểm, nghiêm trong trong hệ thống, chẳng hạn như chúng ngăn chặn việc chạy JVM.
Lưu ý: Đối với các mã có thể đọc được thì đây là thực tế tốt để thêm chuỗi ngoại lệ Exception
với tên của tất cả các lớp kế thừa (trực tiếp hoặc gián tiếp) từ lớp Exception
.