When a try block is entered a control frame is pushed onto the run-time stack.

When an exception is thrown, frames are thrown away until the topmost control frame is found, and the information in that control frame is used to recover from the exception.

When a try block is exited without an exception being thrown, the control frame is removed.