Sorry but I disagree, I think you're approaching try-catch wrong. You shouldn't have a try-catch that *can* continue on the next line after the throw. What you should do is have decoupled code that handles _their own exceptions_ nicely and either cleans up after itself else it rethrows the exception/a new one.
Any top level try-catch is supposed to be a control structure with one of two chances: either lines 1-N go smoothly and no exceptions are thrown, or Exception_X is thrown and you clean up on it's catch block... Also remember that you have the finally block.