…I never can decide between these two. I’m always going back to the code and switching between.
When you’re coding – let’s say a Login class – from an (extended) HttpServlet, which sports both ServletException and IOException, and you just want to throw further your exception (e.g. NoSuchAlgorithmException, NamingException) to see it in a page of your application later, which one do you throw it through: ServletException or IOException?
P.S.: I don’t try to catch every possible NoSuchAlgorithmException, NamingException, etc. because I can miss a real cause that I haven’t seen before and treat it the wrong way or inform the wrong thing to the user.
IOExceptionhas its own meaning. AnIOExceptionshould be only thrown when there as an issue in IO operations e.g. reading/writing data from file or URL. If I have to make choice between the two, I will chooseServletExcetion.But if there is a room to define better exception handling then I would like to create my own custom exception class e.g.
MySystemExceptionextendingRuntimeExceptionand wrap the relevant exceptions asMySystemExceptionand throw it.