Tôi có một vấn đề nhỏ lý thuyết với các cấu trúc cố gắng nắm bắt.Java ngoại lệ không bị bắt?
Tôi hít một kỳ thi thực tế ngày hôm qua về Java và tôi không hiểu ví dụ sau:
try {
try {
System.out.print("A");
throw new Exception("1");
} catch (Exception e) {
System.out.print("B");
throw new Exception("2");
} finally {
System.out.print("C");
throw new Exception("3");
}
} catch (Exception e) {
System.out.print(e.getMessage());
}
Câu hỏi đặt ra là "những gì đầu ra sẽ trông như thế nào?"
Tôi khá chắc chắn nó sẽ là AB2C3, NHƯNG bất ngờ, điều đó không đúng.
Câu trả lời đúng là ABC3 (đã được kiểm tra và thực sự là như thế).
Câu hỏi của tôi là, Ngoại lệ ("2") ở đâu?
+1 Ahh người đàn ông, tôi biết câu trả lời này. Tôi đã được hỏi điều này trong một cuộc phỏng vấn. Đó là một câu hỏi rất hay để hiểu cách try/catch/cuối cùng hoạt động trên stack. –
Chỉ có một lệnh in có thể in một số (lệnh cuối cùng: 'print (e.getMessage())'). Bạn nghĩ đầu ra sẽ là 'AB2C3': bạn có nghĩ rằng khối' catch' ngoài cùng sẽ được thực hiện hai lần không? –
Trong java, trước khi một lệnh chuyển điều khiển ra khỏi khối catch được thực hiện, khối cuối cùng được thực hiện miễn là nó tồn tại. Nếu chỉ có mã trong khối cuối cùng không chuyển điều khiển ra bên ngoài, lệnh trì hoãn từ khối catch được thực thi. – Thomas