If you look at it, you will find that in the first try block, the first statement is "throw new Level1Exception();". so whenever that block runs, it throws and exception and it directly reaches to the corresponding catch block. So avoiding the new try block inside the try block. So this way, the second try block will never reach in any condition. This is why it throws an error while compilation.
your second example.........
You always reach inside the switch block, and execute one of the cases. Its completely a different issue!!!
The difference between these two conditions is that first is related to Exceptions and the other one is a condition statement.