Well, catching a divide by zero exception is not a great example since that usually indicates an error in your program logic. ArithmeticException in
java, which is thrown in that situation is a RuntimeException or unchecked exception. The reason such things are unchecked is because it shouldn't happen in the first place, you need to fix your program. Now what about checked exceptions, the ones you must wrap in a try-catch block? There are many things outside the control of the programmer. For example if you are attempting to open a socket to a server somewhere on the internet, there are literally hundreds of things that can go wrong: your lan hardware could fail, your ISP could be having network problems, the server may be down for maintainence, etc. These problems are totally outside your control as a programmer. So why have an exception at all? Why not just let the connection fail? If you catch the exception you might have an oppurtunity to take an alternate course of action, like trying a different server or dialing a modem or sending an email to an administrator who can fix the problem.
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction. - Ernst F. Schumacher