static int retIntExc() throws Exception{
int result = 1;
try {
result = 2;
throw new IOException("Exception rised.");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e.getMessage());
result = 3;
} finally {
return result;
}
}
Một người bạn của tôi là nhà phát triển .NET và hiện đang di chuyển sang Java và anh ấy hỏi tôi câu hỏi sau về nguồn này. Về lý thuyết, điều này phải là throw IOException("Exception rised.")
và toàn bộ phương pháp retIntExc()
phải throws Exception
. Nhưng không có gì xảy ra, phương thức trả về 2.Ngoại lệ bị nuốt bởi cuối cùng là
Tôi chưa thử nghiệm ví dụ của anh ấy, nhưng tôi nghĩ rằng đây không phải là hành vi mong đợi.
CHỈNH SỬA: Cảm ơn mọi câu trả lời. Một số bạn đã bỏ qua thực tế rằng phương pháp được gọi là retIntExc
, có nghĩa rằng đây chỉ là một số ví dụ thử nghiệm/thử nghiệm, cho thấy vấn đề trong cơ chế ném/đánh bắt. Tôi không cần 'sửa chữa', tôi cần giải thích lý do tại sao điều này xảy ra.
Tại sao bạn không khai báo nó 'ném IOException'? – BoltClock
http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally –