Joshua Bloch summarizes in "Effective Java":
exceptions are, as their name implies, to be used only for exceptional conditions; they should never be used for ordinary control flow
You can find the corresponding snippet of the book ("Item 57: Use exceptions only for exceptional conditions") on Google books.
Besides the reason that exception-abuse can lead to code that's hard to understand Bloch has some reason that is valid for today's JVM implementations:
Because exceptions are designed for exceptional circumstances, there is little incentive for JVM implementors to make them as fast as explicit tests.
In case of the (Hotspot) JVM it's pretty expensive to create an exception (think of the generated stacktrace).