In general, the substitution of exceptions by conditional blocks is not the most sensible idea. Any function (method) should, in principle, perform one task assigned to it. If for one reason or another the task cannot be completed, an exception should be thrown. The method itself in the general case should not be engaged in handling its own exceptions, for this there is the code calling it. The method must either complete the task or report the impossibility of completing it. Let's go back to your example:
For example, the operation of dividing one number by another implies that the user can (try) divide the number by zero. On the one hand, the result of this operation will be an exception that can be processed. On the other hand, it is possible and not to bring the case to the exception by checking the input numbers in advance.
In this case, an exception must be caused - your method received incorrect input data, and cannot correctly perform a division operation. Here your phrase is interesting:
On the other hand, it is possible and not to bring the case to the exception by checking the input numbers in advance.
Can. But what should the code do next if the check fails? Return some magic value of type -1 or 0? It will be incorrect from the point of view of logic. Show error message? This will smack of a design error - a completely different code must be responsible for displaying error messages. Code connectivity will appear, and this is very bad.
In addition, there are such exceptional situations in which no if-else will help. Say, could not open the database connection. What should the program do next? Enter the condition and try again to open it, and then another, another and another? Hardly.
As for the if-else, it makes sense to use them where the “failed” option is just one of the possible correct program states.
To summarize, the method must either complete the task or report the impossibility of its execution. Handling your own exceptions is often not necessary. Should forward them up.
I highly recommend reading Richter’s chapter on exceptions. And indeed this book itself