I convinced myself that the explanation for this is:
Exception is a superclass of RuntimeException. RuntimeException and its subclasses are "unchecked" exceptions which do not have to be declared as being thrown.
So if the try block contained a call to a method which throws an undeclared RuntimeException, then it would be caught in the catch (Exception e) block.
An empty try block could "throw" an undeclared runtime exception, if the JVM freaks out.
Therefore the compiler cannot complain in this case.
I guess someone has a better explanation.

[ April 06, 2003: Message edited by: Barry Gaunt ]