我正在为TCPServer编写一个方法。我编写了如下代码:
// thread run
protected void threadRun(){
// continue running. don't stop
while(true){
try{
try{
}
catch(Exception e1){
try{
} catch(Exception e2){}
finally{
// skip
continue;
}
}
}
catch(Exception e3){
}
}
}
内容并不重要。有代码接受客户端等,但我删除它们以确保它不是关于细节。无论如何,当我尝试编译这段代码时,编译器会说明continue
行:
Error: continue is not inside a loop
通过思考我可能知道它错了,我用Java编写了完整相同的代码,如下所示:
class test{
public static void main(String[] args){
while(true){
try{
try{
}
catch(Exception e1){
try{
} catch(Exception e2){}
finally{
continue;
}
}
}
catch(Exception e3){
}
}
}
}
正如我所料,java编译器不会提供任何错误消息并成功编译。问题到底是什么?
答案 0 :(得分:2)
显然,continue
(和break
)无法突破finally
块。编译:
void run() {
loop:
while (true) {
try {}
catch (Exception e) {}
finally {
continue loop;
}
}
}
会给你这个(省略标签会给你带来同样的错误):
Error: cannot continue out of finally block
我还没有找到这种限制的理由或解释(编辑:请参阅下面的棘轮怪物评论)。但是,我无法想象它是一个超常用的用例。你可能想看看其他选项。