我偶然注意到这个throw
语句(从一些更复杂的代码中提取)编译:
void foo() {
try {
} catch (Throwable t) {
throw t;
}
}
有一个短暂而快乐的时刻,我认为受检异常最终决定已经死了,但它仍然对此感到高兴:
void foo() {
try {
} catch (Throwable t) {
Throwable t1 = t;
throw t1;
}
}
该try
块不必为空;只要该代码不引发检查异常,它似乎就可以有代码。这似乎是合理的,但我的问题是,语言规范中的什么规则描述了这种行为?据我所见,第 14.18 节 throw 语句明确禁止它,因为t
表达式的类型是已检查异常,并且它没有被捕获或声明为抛出。(?)