Tại sao việc trả lại thử không chấm dứt phương pháp?
Is it bad practice to return from within a try catch finally block?
Bạn cần phải lưu ý rằng khi bạn đặt trở lại bên trong một câu lệnh try-catch, sự trở lại bản thân được tổ chức và khối xử lý exeption quản lý.
Khối ngoại lệ chỉ lưu trữ trở lại của bạn và nó thực sự trả về nó chỉ sau khi tất cả các xác minh được thực hiện, trong đó không có nghĩa là khối cuối cùng sẽ thực sự có ảnh hưởng đến lợi nhuận của bạn:
public int returnVal() {
int i = 0;
try {
return i;
}
finally {
i = 99;
}
}
Trong trường hợp này, lợi nhuận sẽ vẫn là 0.
Nhưng trong trường hợp bạn đã đề cập trong câu hỏi, bạn sẽ ảnh hưởng đến lần thứ hai và khối ngoại lệ không muốn cho phép bạn quay trở lại cho đến khi hoàn thành TẤT CẢ xác minh của nó, bạn chỉ luôn luôn lưu trữ một giá trị trả lại 2 lần trong khối ngoại lệ của bạn. Kết quả sẽ luôn là 3.
Chỉ cần ghi nhớ rằng nếu bạn đặt trả lại bên trong một thử-catch-cuối cùng, trở lại đó sẽ không trở lại cho đến khi khối cuối cùng đã chạy; sự trở lại chính nó chỉ được lưu trữ cho đến khi mọi thứ đã được xác minh.
Nguồn
2016-01-11 16:04:08
Khối 'cuối cùng' luôn được gọi là cuối cùng, đó là lý do tại sao nó được gọi là" cuối cùng "(nghĩ về" thử này, bắt bất kỳ ngoại lệ và cuối cùng làm điều đó "). – Thomas
Khối 'cuối cùng' là * luôn luôn * thực hiện bất kể vấn đề gì .. –
yeah tôi hiểu điều đó nhưng tại sao trình biên dịch bỏ qua câu lệnh trả về trong lần thử ngay cả khi nó được đưa vào nó tại thời gian chạy chấm dứt phương thức –