Of course. the exception java.lang.StackOverflowError is excepted, but I don't understand the below message:
That's a rather interesting question. First, (sorry if you already knew) that's called a "stack trace". When the overflow took place, an exception was thrown, and then the JVM handled it by printing this stack trace and exiting.
The link I gave is claiming that the "low level exception" should appear at the bottom as the "caused by" exception. However, I think there is no chain of catch/throw going on here: just one exception that is the only cause.
The recursive calls made through "main(String args)" calling "main()" were filling up the stack. But the stack did not hit its limit until deep down in the implementation of the println() call. I will hazard a guess here, that if your maximum stack size were different (controlled using "-Xss4m" at the command line), you might see this crash in a different place. That "println()" seems to go surprisingly deep, and maybe that will cause the overflow to happen there more often (even with different stack sizes). Once the code returns from that println, the stack 'depth' will get shallower by that many levels. The next recursion call will push it down one level deep, and then a second level to go into "main()", and then Boom! you dive into "println()" again.
I hope that helps.
If a chicken that is half full crosses the road, will anyone hear it?