Bạn có thể quản lý ngoại lệ trong vòng một phương pháp sử dụng try
và catch
như bạn nói. Trong trường hợp đó, bạn không cần sử dụng throws
. Ví dụ:
public void myMethod()
{
try {
/* Code that might throw an exception */
}
catch (SpaceInvadersException exception) {
/* Complicated error handling code */
}
}
Nhưng giả sử bạn có hàng nghìn phương pháp, tất cả đều có thể ném SpaceInvadersException
. Sau đó, bạn sẽ phải viết tất cả các mã xử lý lỗi phức tạp một nghìn lần. Tất nhiên, bạn luôn có thể tạo một lớp học ErrorHandler
với phương thức dealWithSpaceInvadersException()
mà bạn có thể gọi từ họ, nhưng bạn vẫn bị kẹt với một nghìn khối try
- catch
.
Thay vào đó, bạn thông báo cho trình biên dịch rằng mỗi nghìn phương thức này có thể ném SpaceInvadersException
.Sau đó, bất kỳ phương thức nào gọi một trong các phương pháp này cũng cần phải tự xử lý lỗi bằng cách sử dụng try
- catch
hoặc bằng cách thông báo cho trình biên dịch rằng nó có thể ném SpaceInvadersException
. Này được thực hiện bằng cách sử dụng từ khóa throws
, như thế này:
public void myMethod() throws SpaceInvadersException
{
/* Code that might throw an exception */
}
public void callingMethod()
{
try {
myMethod();
}
catch (SpaceInvadersException exception) {
/* Complicated error handling code */
}
}
Trong trường hợp đó, bạn cần phải thông báo cho trình biên dịch rằng myMethod
có thể ném một SpaceInvadersException
. Điều này có nghĩa là bạn không thể gọi phương thức đó mà không xử lý ngoại lệ theo một cách nào đó (try
- catch
hoặc sử dụng từ khóa throws
trên phương thức gọi). Nếu throws
không có ở đó, bạn có thể gọi phương thức mà không thực hiện bất kỳ xử lý ngoại lệ nào và nhận ngoại lệ không được xử lý ở bất kỳ đâu trong chương trình (điều này sẽ là xấu).
Vì cách tốt nhất là tránh trùng lặp mã, tốt hơn hết là bạn nên xử lý lỗi ở mức try
- catch
ở hàm mức cao hơn nhiều so với cách xử lý riêng trong tất cả các phương thức cấp thấp . Đó là lý do tại sao cơ chế này tồn tại.
Nguồn
2013-08-28 14:48:07
Java sử dụng ném khoản để nói với trình biên dịch rằng phương pháp có thể ném ngoại lệ là đúng. Nhưng nó cũng cảnh báo người gọi về ngoại lệ đặc biệt có thể xảy ra khi gọi phương thức đó. Vì vậy, người gọi phương pháp có thể thực hiện một số bước dựa trên điều đó. –