Consider:
try {
    ...
} catch (Exception) {
    ...
} catch (StdioException) {
    ...
}
The second handler never matches because StdioException is a subclass of 
Exception, so the first handler will always match whatever the second 
matches.
Should that be a compile-time error? I think so.
Andrei