为了补充Michael Borgwardt的答案,为了方便起见,你可以做这样的事情(前几天我在阅读Java rt.jar源代码时刚刚发现了这一点):
BlockSegment:
if (conditionIsTrue) {
doSomeProcessing ();
if (resultOfProcessingIsFalse()) break BlockSegment;
otherwiseDoSomeMoreProcessing();
// These lines get skipped if the break statement
// above gets executed
}
// This is where you resume execution after the break
anotherStatement();
现在,这在逻辑上等效于:
if (conditionIsTrue) {
doSomeProcessing ();
if (!resultOfProcessingIsFalse()) {
otherwiseDoSomeMoreProcessing();
// More code here that gets executed
}
}
anotherStatement();
但是,您可以跳过一些额外的大括号(以及大括号附带的缩进)。也许它看起来更干净(在我看来确实如此),并且在某些地方,这种编码风格可能是合适的,并且不那么令人困惑。
因此,您可以使用超越循环的标签,甚至超越语句。例如,这是有效的Java语法(也许你可以想出一个理由来做这样的事情):if
statementOne();
statementTwo();
BlockLabel: {
statementThree();
boolean result = statementFour();
if (!result) break BlockLabel;
statementFive();
statementSix();
}
statementSeven();
如果在此处执行,则执行将跳到标签所表示的块的末尾,并被跳过。break
statementFive()
statementSix()
这种样式(没有语句)的有用性在必须跳过的块内有块时变得更加明显。通常,您可以通过足够聪明地使用循环来完成所有事情。但是,在某些情况下,不带循环的标签可以更轻松地读取代码。例如,如果需要按顺序检查参数,则可以执行此操作或引发异常。它最终成为代码和个人风格的清洁度问题。if