Exceptions are basically classified as: Checked Exceptions and Unchecked Exceptions.
Checked Exceptions may or may not be user-defined and, as such, need to be handled by your code.
Unchecked Exceptions are basically thrown and handled by the complier. You may or may not handle these.
Your first program: You are catching Exception e. In other words, you are catching any of the RunTimeExceptions - Unchecked Exceptions - that are likely to occur. Since you are not expected to handle these (but you may) your code works fine.
Your second program: You are catching Exception1 e, which is never thrown in your code. Realize that Exception1 is actually a checked exception which must be thrown *AND* handled by your code.