Firstly, it’s just a bad design, because the “exception” has semantic meaning (“some circumstance prevented this method from fulfilling its contract”) and that the abuse of this function was an unpleasant surprise.
In the case of Java, creating exception objects (in particular, populating stack traces) is extremely expensive because it involves moving the stack, many object distributions, and string manipulation, etc. In fact, throw an exception not if the main penalty for execution.
source share