Таким образом, я предполагаю, что официальные учебные пособия и их объяснения неверны ...
ня я только что узнал, что следующий код Java абсолютно легален:
myBlock: {
/* ... code ... */
if (doneExecutingThisBlock())
break myBlock;
/* ... more code ... */
}
Обратите внимание, чтоmyBlock
это не цикл - это просто блок кода, который я разделил фигурными скобками.
Это кажется довольно странной особенностью. Это означает, что вы можете использовать именованныйbreak
вырваться изif
заявление или анонимный блок, хотя вы обычно не можете использоватьbreak
утверждение в этих контекстах.
У меня вопрос такой:есть ли веская причина для такого дизайнерского решения? То есть, зачем делать так, чтобы вы могли вырываться только из определенных вложенных операторов, используяbreak
с, но не регулярноbreak
s? И зачем вообще допускать такое поведение? Учитывая (сравнительно) хорошо спроектированную Java как язык, я бы предположил, что есть причина для этого, но я, честно говоря, не могу придумать одну.