Чтобы добавить ответ Михаэля Боргвардта, для удобства вы можете сделать что-то подобное (я обнаружил это на днях, читая исходный код 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();
Но вы можете пропустить некоторые дополнительные скобки (и отступы, которые идут с фигурными скобками). Возможно, это выглядит чище (по моему мнению), и есть некоторые места, где этот стиль кодирования может быть уместным и менее запутанным.
Таким образом, вы можете использовать метки за пределами только циклов и даже за пределами if
операторов. Например, это допустимый синтаксис Java (и, возможно, вы могли бы придумать причину сделать что-то подобное):
statementOne();
statementTwo();
BlockLabel: {
statementThree();
boolean result = statementFour();
if (!result) break BlockLabel;
statementFive();
statementSix();
}
statementSeven();
Если здесь выполняется break
, то выполнение переходит к концу блока, обозначенного меткой, а statementFive()
и statementSix()
пропускаются.
Полезность этого стиля (без оператора if
) становится более очевидной, когда у вас есть блоки внутри блоков, где вы должны пропустить. В общем, вы можете добиться всего с достаточно умным использованием циклов. Тем не менее, есть несколько случаев, когда метки без циклов облегчают чтение кода. Например, если вам нужно последовательно проверять параметры, вы можете сделать это или вызвать исключение. В конечном итоге это вопрос чистоты кода и личного стиля.