각 프로그램에 대해 말하자면, 메소드 호출 수가 무한하거나 빠를 것이고 이유를 설명하십시오. 블로흐 (Bloch)와 같은 예입니다 - Java Puzzlers # 45StackOverFlowError + 재귀 재밌는 트릭
1)
public static void main(String[] args)
{
try
{
main(args);
}
catch(StackOverflowError e)
{
main(args);
}
}
2)
public static void main(String[] args)
{
try
{
main(args);
}
catch(StackOverflowError e)
{
main(args);
}
finally
{
main(args);
}
}
알아 두어야 할 점이 있습니다. 예를 들어 JVM의 스택 깊이는 1024입니다.이 프로그램을 실행하면 Main 메서드가 1024 번 호출되고 StackOverflowError가 발생하고 main 메서드가 다시 호출되는 catch 블록으로 이동합니다. 그래서 어느 수준의 깊이에 있습니까? 1024? 1023? 1025 ?? 또는 첫 번째 스택이 채워지고 다른 스택이 만들어지고 0부터 시작됩니까? 어떻게 작동합니까? 마침내 두 번째 예에서도 막을 수 있을까요?
왜 그냥 사용해 보지 않으시겠습니까? –
정말로 블로흐를 읽지는 않을 것입니다. - Java Puzzlers # 45 – OxomHuK
finally 블록에 예외가 발생하면 finally 블록 밖으로 던져 질 것이고 이전에 catch에서 던져진 예외를 대체 할 것입니다. 또한 "첫 번째 스택이 채워진 다음 다른 스택이 만들어집니다"라는 질문은 의미가 없습니다. 지정된 호출 경로에는 하나의 호출 스택 만 있습니다. –