"loop:" в коде Java. Что это такое, почему он компилируется?
этот код просто заставил меня смотреть на мой экран на несколько минут:
loop:
for (;;) {
// ...
}
Я никогда не видел этого раньше, и я понятия не имел, что Java имеет ключевое слово "loop" (Netbeans даже не окрашивает его как ключевое слово), и он отлично компилируется с JDK 6.
может кто-нибудь объяснить это мне?
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