I would expect the following code to raise a compile-time error on throw t;, because main is not declared to throw Throwable, but it c
throw t;
main
Throwable
When you catch Throwable or Exception and the variable is effectively final you can rethrow the same variable and the compiler will know which checked exceptions you could have thrown in the try {} catch block.
Exception
try {} catch