Блок Labeled Statement в Java?

Я просматривал некоторые базовые объекты Java, когда нашел раздел кода, окруженный scan: {} block. Следующий код относится к методу toLowerCase () внутри classа String.

 scan: { for (firstUpper = 0 ; firstUpper = Character.MIN_HIGH_SURROGATE) && (c <= Character.MAX_HIGH_SURROGATE)) { int supplChar = codePointAt(firstUpper); if (supplChar != Character.toLowerCase(supplChar)) { break scan; } firstUpper += Character.charCount(supplChar); } else { if (c != Character.toLowerCase(c)) { break scan; } firstUpper++; } } return this; } 

Может кто-нибудь объяснить, что scan:{} блок используется и откуда этот синтаксис? Мне еще предстоит увидеть двоеточие после такого слова на Java, если оно не используется в тройном операторе.

Благодаря!

Изменить: обновить заголовок, чтобы правильно отвечать на заданный вопрос.

Здесь scan: это просто ярлык . Синтаксис break позволяет вырваться из внешних циклов и имитировать некоторые формы инструкции goto . Синтаксис документирован в JLS :

Оператор break с меткой Identifier пытается передать управление заключенному помеченному выражению (§14.7), который имеет тот же Identifier что и его метка; это утверждение, которое называется целью прерывания, затем немедленно завершается нормально. В этом случае целью разрыва не обязательно должен быть switch , while , do или for .

Это labeled block. где scan: это метка . Он обычно используется при разрыве / продолжении, если у вас есть несколько циклов. В этом случае break scan; просто вырывается из маркированного блока (сканирование) при его выполнении.

Вы можете установить ярлык для разрыва / или продолжения из нескольких петель.

пример

  outer: for(int i=...){ for(int j=..){ ... break outer; // leaves both loops } } 

Это label . Это индикатор контроля streamа.

Если вы посмотрите на свой код, вы увидите ниже

  break scan; 

Когда это произойдет, stream полностью выйдет из блока scan .

Кстати, это может быть любой идентификатор, scan не является ключевым словом.

  • Как изменить столбец MySQL, чтобы разрешить NULL?
  • Есть ли инструкция goto в Java?
  • Почему переменные конструктора конструктора объекта C # 3.0 необязательны?
  • Код цвета кода кодирования xcode / не работает
  • В чем разница между этим и Activity.this
  • Knockout.js без контейнера «foreach» не работает с
  • $ (document) .on ('click', '#id', function () {}) vs $ ('# id'). on ('click', function () {})
  • Почему шестнадцатеричные числа с префиксом 0x?
  • Когда требуется ключевое слово «typename»?
  • Каковы некоторые примеры использования символьных литералов в Scala?
  • Лучший способ разделить строку на строки
  • Давайте будем гением компьютера.