Consider this scenario: I have 3-layer app, when the user click on the button the button event handler calls a method in biz layer that do whatever with data my button even
When I have a multi-layer architecture like this (which is a lot) I will often have a try/catch at more than one layer. For example, a try/catch in the persistence layer that catches an SQLException, does what the persistence layer needs to do (like notify an admin, for example) then throws a new exception that will make sense to some code that calls the persistence layer. An example might be PersistenceException. The next layer up doesn't care about who should be notified to re-start the database, but it does care that it couldn't save user state, so it might catch the PersistenceException and tell the user that his new phone number wasn't stored in the database.