Với đoạn mã sau:Tại sao try..finally chặn không đăng ký ngoại lệ ban đầu là bị chặn?
try {
throw new RuntimeException ("main");
}
finally {
throw new RuntimeException ("finally");
}
tôi nhận được kết quả này:
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:12)
Tuy nhiên, với việc bổ sung các trường hợp ngoại lệ ức chế trong Java 7, nó sẽ không được hợp lý cho các ngôn ngữ để đăng ký ban đầu ngoại lệ "chính" bị chặn khi không có mã số finally
không có ngoại lệ? Hiện nay tôi phải tự thi đua này:
try {
throw new RuntimeException ("main");
}
catch (RuntimeException exception) {
try {
throw new RuntimeException ("finally");
}
catch (RuntimeException exception2) {
exception2.addSuppressed (exception);
throw exception2;
}
}
nhận hữu ích hơn (để hiểu những gì đang xảy ra) Kết quả:
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:13)
Suppressed: java.lang.RuntimeException: main
at test.main(test.java:9)
EDIT: Để làm rõ những gì tôi đang tự hỏi. Phiên bản Java hiện tại là 8, các ngoại lệ bị chặn không phải là một tính năng hoàn toàn mới. Nhưng try..finally
vẫn không kết hợp chúng. Có điều gì ngăn cản điều này xảy ra không?
Ngoại lệ bị loại bỏ không phải là trường hợp được ném vào 'cuối cùng'? – StenSoft
@StenSoft: Ngay cả khi có lẽ hợp lý hơn, điều đó sẽ phá vỡ tính tương thích ngược hoàn toàn. – doublep
Tôi không hiểu các phiếu bầu gần gũi, phải trung thực. Đây là một câu hỏi hoàn toàn hợp pháp. – fge