Có ý nghĩa để khai báo một phương pháp để ném một ngoại lệ và một lớp con của ngoại lệ này, ví dụ IOException và FileNotFoundException?
Thông thường không - hầu hết các IDE tôi biết thậm chí là cảnh báo về các tuyên bố như vậy. Những gì bạn có thể và cần làm là ghi lại các ngoại lệ khác nhau được ném vào Javadoc.
Tuy nhiên, có thể xử lý cả hai trường hợp ngoại lệ nếu phương pháp này chỉ ném chung nhất i.e IOException?
Có, bạn chỉ cần đảm bảo rằng các khối catch theo đúng thứ tự, tức là cụ thể hơn trước.catch khối được đánh giá theo thứ tự chúng được xác định, vì vậy đây
try {
...
} catch (FileNotFoundException e) {
...
} catch (IOException e) {
...
}
nếu ném ngoại lệ là một FileNotFoundException
, nó sẽ được đánh bắt bởi các catch
khối đầu tiên, nếu không nó sẽ rơi xuống thứ hai và bị xử lý như một chung IOException
. Thứ tự ngược lại sẽ không hoạt động như catch (IOException e)
sẽ bắt tất cả IOException
s bao gồm FileNotFoundException
. (. Trong thực tế, sau này sẽ cho kết quả trong một IIRC lỗi biên dịch)
Nguồn
2012-06-20 09:49:59
Bạn nói đúng đó là không sạch sẽ - nhưng nó không cần thiết, một trong hai. Xem câu trả lời của tôi và của Karthik. Về cơ bản không cần phải có sự xấu xa này. –
@Jon nếu chúng ta khai báo phương thức để ném IOException, làm thế nào người gọi đến để biết rằng nó cũng có thể tăng FileNotFoundException? –
Nó không phải là "cũng" - một FileNotFoundException * là * một IOException, vì vậy bạn luôn có thể cố gắng nắm bắt nó nếu phương pháp tuyên bố rằng nó ném IOException. Nó sẽ được vào tài liệu để xác định trong những trường hợp xảy ra. –