我刚刚发现我可以为For和While语句命名。我知道如果你想打破或继续一个特定的循环,这是有用的 但为什么我要给一个名字?它看起来毫无用处
name: if(true){
//do something
}
编译没有问题
答案 0 :(得分:10)
如果你有一个带有名字的代码块,你可以使用break来退出它,这就是我找到的用于命名块的用法。
name: if(true) { // do something if(/* condition */) { break name; } // do more }
它也可以在没有if:
的情况下工作name: { // do something if(/* condition */) { break name; } // do more }
当我的工作出现在某些逻辑上存在一系列保护条件时,以及另一组逻辑将会降低,无论警卫的结果如何。
另一个例子,其中替代结构更难以阅读和修改:
block: if(/* guard */) { // prep work if(/* guard */) { break block; } // prep work if(/* guard */) { break block; } // real work }
虽然我通常使用裸块而不是if。
答案 1 :(得分:6)
您可以在任何语句块之前使用标签。这可能是最常用于循环的,但在其他地方完全有效。
答案 2 :(得分:2)
Sarah Happy的答案实际上比我的更正确,表明你可以使用break
打破代码块,除了循环,所以我建议看看她的答案。
这确实是label,正如你所说的For和While循环。它在其他地方有效,但我想补充一点,不能使用
goto name;
虽然goto
是保留字,但Java 不支持goto,但它确实以带有break
和{{1}的标记循环的形式支持goto }。
如果您扩展了代码示例以包含goto,例如:
continue
您会收到错误,同时说 name: if(true){
//do something
}
goto name;
和illegal start of expression
或者,如果您尝试将not a statement
与您的标签一起使用,但没有循环,例如:
continue
你得到 name: if(true){
//do something
}
continue name;
因此,就编译器而言,拥有一个没有循环的标签是可以的,但是如果没有循环它就毫无价值。
答案 3 :(得分:0)
就像打破循环一样,你可能想要跳回或转向if语句。虽然每当你开始考虑这个问题时,请考虑创建一个新方法。