There is no "StackOverFlowException". What you mean is "StackOverFlowError".
Yes you can continue working if you catch it because the stack is cleared when you do that but that would be a bad and ugly option.
When exactly the error is thrown ? - When you call a method and the JVM verifies if there is enough memory to do it. Of course, the error is thrown if it's not possible.
- No, that is the only way you can get that error: getting your stack full. But not only through recursion, also calling methods that infinitely call other methods. It's a very specific error so no.
- It is thrown before the stack is full, exactly when you verify it. Where would you put the data if there is no space available ? Overriding others ? Naah.