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