Trong nỗ lực cung cấp bằng chứng hợp lý rằng cuối cùng SILL này sẽ chấm dứt, tôi đưa ra mã khá vô nghĩa sau đây. Lưu ý: Java KHÔNG phải là ngôn ngữ của tôi, bởi bất kỳ sự tưởng tượng sống động nhất. Tôi chỉ dâng này lên để hỗ trợ câu trả lời Phêrô, đó là những câu trả lời đúng cho câu hỏi.
Điều này cố gắng mô phỏng các điều kiện của những gì xảy ra khi một lệnh gọi KHÔNG thể xảy ra bởi vì nó sẽ giới thiệu một tràn ngăn xếp. Dường như với tôi điều khó nhất mà mọi người không nắm bắt được là việc gọi không xảy ra khi không thể xảy ra.
public class Main
{
public static void main(String[] args)
{
try
{ // invoke foo() with a simulated call depth
Main.foo(1,5);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public static void foo(int n, int limit) throws Exception
{
try
{ // simulate a depth limited call stack
System.out.println(n + " - Try");
if (n < limit)
foo(n+1,limit);
else
throw new Exception("StackOverflow@try("+n+")");
}
finally
{
System.out.println(n + " - Finally");
if (n < limit)
foo(n+1,limit);
else
throw new Exception("StackOverflow@finally("+n+")");
}
}
}
Đầu ra của đống goo vô nghĩa nhỏ này là như sau, và ngoại lệ thực tế bị bắt có thể gây ngạc nhiên; Ồ, và 32 cuộc gọi thử (2 ^ 5), hoàn toàn được mong đợi:
1 - Try
2 - Try
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
2 - Finally
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
1 - Finally
2 - Try
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
2 - Finally
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
java.lang.Exception: StackOverflow@finally(5)
finally
mệnh đề sẽ lan truyền lên cấp độ tiếp theo. Nhưng đừng nín thở; số bước được thực hiện sẽ vào khoảng 2 đến (độ sâu ngăn xếp tối đa) và việc ném ngoại lệ cũng không chính xác.