Yes, there are many places where people say "exception" when it should really be "error" or "throwable". Even in materials from Sun and Oracle, including some messages from the JVM. In text written by humans, there's a tendency to mix these up. In actual Java code however, there's a strict distinction. So if you want to catch something that's really an Error, you need to say catch Error or catch Throwable.
Note that many people will say you should never do that, and in production code that's often true, though not never. But for experimentation for learning purposes, no problem, go ahead and see what happens.
The root of everything that can cause an immediate and rapid ascent back up the call stack is java.lang.Throwable. Throwable is not normally used directly as an application base class itself but rather via one of the two primary throwable bases: Error or Exception. And, of course, Exception further breaks down between unchecked (RuntimeException) and unchecked Exceptions (everything else).
Note the class name here: It's StackOverflowError, not Exception.
And, while as Mike has said, we tend to think of any throwable abstractly as an "exception", you're trying to catch explicitly class java.lang.Exception and subclasses thereof, not java.lang.Error and and its descendants (including StackOverflowError). Nor, for that matter would your catch clause catch anything that someone might have built directly on java.lang.Throwable that wasn't a java.lang.Exception.
Some people, when well-known sources tell them that fire will burn them, don't put their hands in the fire.
Some people, being skeptical, will put their hands in the fire, get burned, and learn not to put their hands in the fire.
And some people, believing that they know better than well-known sources, will claim it's a lie, put their hands in the fire, and continue to scream it's a lie even as their hands burn down to charred stumps.