我认为我在Java编译器中发现了一个错误。 在下面的代码中,功能测试抛出了一个已检查的异常。 当我在提交给执行者的Runnable内部使用函数并且while(true)内部使用该函数时,编译器未强制执行try / catch块或未向签名添加异常。 代码编译并成功运行。
这是编译器中的错误还是我缺少什么?
如果我删除while(true) 或不在提交中执行此操作,编译器将正常工作
编译:
public static void main(String[] args) {
Executors.newSingleThreadScheduledExecutor().submit(()-> {
while (true) {
test();
}
});
}
public static void test() throws IOException {
throw new IOException();
}
未编译:
public static void main(String[] args) {
Executors.newSingleThreadScheduledExecutor().submit(()->{
test();
});
}
也无法编译
public static void main(String[] args) {
while (true) {
test();
});
}
预期:编译错误。 结果:构建成功