Catching an Exception
Once a throw is executed, control is immediately
transferred from the try block to the first catch block in the
thread of control whose type matches the type of operand
associated with the throw.
The catch block is then executed and we either terminate,
return, or continue at the first statement following the
sequence of catch blocks in which the exception was
handled.
Think of throw as analogous to a function call and catch as
analogous to a function definition. There can be multiple
catch blocks each with a unique "formal argument" type.