"loop:" в коде Java. Что это, зачем он компилируется?
Этот код просто заставил меня взглянуть на мой экран в течение нескольких минут:
loop:
for (;;) {
// ...
}
(строка 137 здесь)
Я никогда раньше этого не видел, и я понятия не имел, что у Java есть ключевое слово цикла (Netbeans даже не окрашивает его как ключевое слово), и он отлично компилируется с помощью JDK 6.
Может кто-нибудь объяснить это мне?
Ответы
Ответ 1
Это не keyword
это label
.
Использование:
label1:
for (; ; ) {
label2:
for (; ; ) {
if (condition1) {
// break outer loop
break label1;
}
if (condition2) {
// break inner loop
break label2;
}
if (condition3) {
// break inner loop
break;
}
}
}
Документация.
Ответ 2
Как говорили другие плакаты, это ярлык, а не ключевое слово. Использование меток позволяет делать такие вещи, как
outer: for(;;) {
inner: for(;;) {
break outer;
}
}
Это позволяет нарушить внешний цикл.
EDIT: ссылка на документацию
Ответ 3
Ответ на вопрос, но в качестве примечания:
Я слышал о вопросах интервью a la "Почему этот код Java действителен" (лишенный более простой пример, здесь более средний, спасибо Tim Büthe):
url: http://www.myserver.com/myfile.mp3
downLoad(url);
Вы все знаете, что этот код (кроме ужасного)?
Решение: две метки, url
и http
, комментарий www.myserver.com/myfile.mp3
и вызов метода с параметром с таким же именем (url
) в качестве метки. Yup, это компилируется (если вы определяете вызов метода и локальную переменную в другом месте).
Ответ 4
Это не ключевое слово, это метка. Он предназначен для использования с ключевыми словами break
и continue
внутри вложенных циклов:
outer:
for(;;){
inner:
for(;;){
if(){
break inner; // ends inner loop
} else {
break outer; // ends outer loop
}
}
}
Ответ 5
Это не ключевое слово, а label.
Это позволяет перейти к помеченному разрыву и помеченному далее.
Ответ 6
Его метка точки прерывания, чтобы вы могли вырваться из заданного цикла, а не просто самый внутренний, в котором вы оказались.
Используется на строке 148
Ответ 7
Это действительно ответ на комментарий seanizer для ответа org.life.java, но я хотел ввести код, поэтому я не мог использовать функцию комментария.
В то время как очень редко я нахожу использование "метки разрыва", это происходит случайно. Самый распространенный случай - когда я ищу что-то, что находится в структуре, требующей поиска вложенного цикла, например:
search:
for (State state : stateList)
{
for (City city : state.cityList)
{
if (city.zipcode.equals(wantZip))
{
doSomethingTo(city);
break search;
}
}
}
Обычно в таких случаях я выталкиваю все это в подпрограмму, так что при попадании я могу вернуть найденный объект, и если он выпадет в нижней части цикла, я могу вернуть значение null, чтобы указать, что не найдено, или, может быть, бросить исключение. Но это иногда полезно.
Честно говоря, я думаю, что изобретатели Java включили эту функцию, потому что между этим и обработкой исключений они устранили последние два законных использования для GOTO.
Очень позднее дополнение:
Однажды я увидел отличную линию кода. Программист написал:
http://www.example.com/xyz.jsp
for (Foo foo1 : foolist)
Он на самом деле не сказал "example.com", но наш веб-сайт нашей компании.
Создается впечатление, что в коде есть URL. Он успешно компилируется, как будто он что-то делает. Но... что он делает?
В действительности он ничего не делает. "http:" - это ярлык, который он никогда не упоминает. Затем "//" делает остальную часть строки комментарием.
Ответ 8
Это метка, хотя посмотрите на следующий пример:
int a = 0;
int b = 0
while (a<10){
firstLoop:
a++;
while(true){
b++
if(b>10){
break firstLoop;
}
}
}
Когда b>10
поток выполнения переходит во внешний цикл
Ответ 9
Вы можете написать почти все, так как это ярлык...
У вас есть пример здесь
Ответ 10
Это метка, а метки в java могут использоваться с ключевыми словами break
и continue
для дополнительного управления контурами.
Здесь это объясняется довольно неплохо:
http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ305_024.htm
Ответ 11
Это не ключевое слово, а ярлык . Если внутри цикла for вы пишете break loop;
, вы выходите из этого цикла
Ответ 12
это метка. универсальная метка, используемая в java для переноса потока управления в нужное место, в то время как все ключевые слова, такие как continue, break, имеют определенный набор местоположений.