This code compiles and while running error thrown at try block is caught by catch.
All the confusion arised from the Sun
java documentation for Errors.
They have given
"An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a "normal" condition, is also a subclass of Error because most applications should not try to catch it. "