A good example from Sun is JDBC, where only SQLException is send, while it uses IOStream. It never throws neither java.io.IOException, nor java.net.* exceptions. When catching that exception, do you really care about the IOException? I don't think so, you just want to recover from the error. And, even in case you need it, you're still able to query the embbeded exception (getCause()).