이 WILL이 결국 종료 될 것이라는 합리적인 증거를 제공하기 위해 다음과 같은 의미없는 코드를 제공합니다. 참고 : Java는 가장 생생한 상상력으로 인해 내 언어가 아닙니다. 나는 베드로의 대답 지원 만이를 신혼 질문에 대한 정답을.
이렇게하면 스택 오버플로가 발생하여 호출이 발생할 수없는 경우 발생하는 상황을 시뮬레이션합니다. 사람들이 그 일을 할 수 없을 때 호출이 일어나지 않는다는 점에서 사람들이 이해하지 못하는 것이 가장 어려운 것 같습니다 .
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+")");
}
}
}
이 작은 의미없는 끈적 끈적한 결과는 다음과 같으며 실제로 포착 된 예외는 놀랍습니다. 아, 그리고 32 회 시도 (2 ^ 5)는 완전히 예상됩니다.
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
절을 처리하는 동안 발생하는 오류 가 다음 레벨로 전파 되기 때문에 프로그램은 결국 중지 됩니다. 그러나 숨을 참지 마십시오. 걸음 수는 약 2에서 최대 스택 깊이까지이며 예외를 던지는 것도 정확하게 싸지는 않습니다.