Java compiler only checks whether checked exceptions are caught or not. If method is throwing the checked exception and catch block doesn't specify that exception or superclass of it, then compilation error would occur. Here method is throwing error and compiler would not check if there exist a catch block for error or not. So there would not be any compilation error.
As error is subtype of Throwable , a Throwable is thrown by main.
Oracle Certified Professional, Java SE 6 Programmer (81%), Oracle Certified Expert, Java EE 6 Web Component Developer (87%)
One source of the confusion may be that the message displayed by the JVM is a little misleading:
It produces the message "Exception in thread..." when anyThrowable is handled by the JVM. Even if it's not actually an Exception object. Errors are in a different branch of the inheritance tree to Exception, but that message still gets shown. Think of it as meaning "exceptional condition" rather than "java.lang.Exception".
And yes, I'd agree: E. If an Exception was thrown it would be caught in the main method, and you'd get some output. But nowhere in the code is catching an Error.