"loop:" в коде Java. Что это такое, почему он компилируется?



этот код просто заставил меня смотреть на мой экран на несколько минут:



loop:
for (;;) {
// ...
}


(здесь 137)



Я никогда не видел этого раньше, и я понятия не имел, что Java имеет ключевое слово "loop" (Netbeans даже не окрашивает его как ключевое слово), и он отлично компилируется с JDK 6.



может кто-нибудь объяснить это мне?

462   12  

12 ответов:

- Это не 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;
            }
        }
    }

документация.

Как говорили другие плакаты, это ярлык, а не ключевое слово. Использование ярлыков позволяет делать такие вещи, как

outer: for(;;) {
   inner: for(;;) {
     break outer;
   }
}

Это позволяет разорвать внешний цикл.

изменить: с ссылка на документацию

на этот вопрос есть ответ, но в качестве примечания:

Я слышал о вопросах интервью а-ля " почему этот код java действителен "(лишенный более простого примера, вот более средний, thx Tim Büthe):

url: http://www.myserver.com/myfile.mp3
downLoad(url);

вы все знаете, что это за код (кроме ужасного)?

решение: две марки url и http комментарий www.myserver.com/myfile.mp3 и вызов метода с параметром, который имеет то же имя (url) в качестве метки. Да, это компилируется (если вы определяете вызов метода и локальная переменная в другом месте).

Это не ключевое слово, это ярлык. Он предназначен для использования с break и continue ключевые слова внутри вложенных циклов:

outer:
for(;;){
    inner:
    for(;;){
        if(){
            break inner; // ends inner loop
        } else {
            break outer; // ends outer loop
        }
    }
}

Это не ключевое слово, это label.

Это позволяет вам пойти помеченный перерыв и помечены продолжить.

это метка точки останова, чтобы позволить вам вырваться из указанного цикла, а не просто самый внутренний, в котором вы находитесь.

его используют на строка 148

это действительно ответ на комментарий seanizer к org.жизнь.ответ java, но я хотел ввести некоторый код, чтобы я не мог использовать функцию комментариев.

в то время как это очень редко, что я нахожу применение для "break label", это происходит время от времени. Наиболее распространенный случай, когда я ищу что-то, что находится в структуре, требующей вложенного цикла для поиска, например:

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:" - это ярлык, на который он никогда не ссылается. Затем "/ / " делает остальную часть строки комментарием.

вы можете написать почти все, что угодно, так как это ярлык... У вас есть пример здесь

это метка, хотя посмотрите на следующий пример:

int a = 0;
int b = 0
while (a<10){
    firstLoop:
    a++;
    while(true){
        b++
        if(b>10){
            break firstLoop;
        }
    }
 }

, когда b>10 поток выполнения переходит во внешний цикл

это метка, и метки в java могут быть использованы с break и continue ключевые слова для дополнительного управления циклами. Здесь это объясняется довольно хорошо: http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ305_024.htm

Это не ключевое слово, а метка. Если внутри цикла for вы пишите break loop;, вы выходите из этого цикла

это метка. общая метка, используемая в java для передачи потока управления в нужное место, в то время как все ключевые слова, такие как continue, break, имеют заданный выбор местоположения.

Comments

    Ничего не найдено.