Какая точка использования обозначенных операторов в Java?
Я занят изучением своей сертификации, и я наткнулся на концепцию, о которой я даже не слышал раньше - "Обозначенные заявления". например:
'label': 'statement'
L1: while(i < 0){
L2: System.out.println(i);
}
Итак, мой вопрос: почему? Как это полезно и когда вы хотите использовать что-то вроде этого?
Ответы
Ответ 1
Единственное, что я знаю, это то, что вы можете использовать метки в операторах break
или continue
. Поэтому, если у вас есть вложенные циклы, это способ вырваться из более чем одного уровня за раз:
OUTER: for (x : xList) {
for (y : yList) {
// Do something, then:
if (x > y) {
// This goes to the next iteration of x, whereas a standard
// "continue" would go to the next iteration of y
continue OUTER;
}
}
}
Как следует из примера, иногда полезно, если вы повторяете две вещи одновременно вложенным способом (например, поиск совпадений) и хотите продолжить - или если вы делаете обычную итерацию, но по какой-то причине хотите поставить разрыв/продолжить во вложенном цикле for
.
Я использую их только раз в несколько лет. Там есть курица и яйцо, в которой их трудно понять, потому что они редко используются, поэтому я избегу использовать ярлыки, если код может быть четко написан по-другому.
Ответ 2
Его можно использовать, чтобы избежать необходимости в флаге "не найден".
FOUND: {
for(Type t: list)
if (t.isTrue())
break FOUND;
// handle not found.
}
Возможно, это неправильное использование меток, но вы можете использовать их для разрыва без цикла.
LABEL: {
if(condition)
break LABEL;
// do something
}
Его также можно использовать, чтобы запутать людей, что является хорошей причиной для его предотвращения.;)
http://www.google.com
while(true) break http;
Ответ 3
Я думаю, что они требуются, чтобы вы могли писать Fortran, притворяясь, что пишите Java. Без них афоризм Реальные программисты писать в Fortran на любом языке они могут быть признаны недействительными.
Ответ 4
Я использовал их в качестве комментариев. Шутки в сторону, это похоже на инструкции Go в базовые, что позволяет вам перейти к строке кода, то есть во время глубокой структуры цикла...
Использование:
scan: {
int c;
for (firstUpper = 0 ;
firstUpper < count ;
firstUpper += Character.charCount(c)) {
c = codePointAt(firstUpper);
if (c != Character.toLowerCase(c)) {
break scan;
}
}
return this;
}
Ответ 5
Вот пример чрезмерного break
, который, вероятно, будет пропущен остальными ответами. Это позволяет разбить цикл в выражении switch {}:
loop: for(;;){
int c=in.read();
switch(c){
case -1:
case '\n':
break loop;
case 'a':
processACommand();
break;
case ...
default:
break;
}
}
Ответ 6
Как указывали другие ответы, ярлыки редко используются частью языка Java.
Но в вашем случае следует рассмотреть некоторые другие вещи:
-
Этикетки довольно "родовые" и фактически являются номерами строк: L1
, L2
,...
-
Этикетки не используются в коде.
-
Вы изучаете материал для сертификации.
Это означает, что метки L1
, L2
- это просто номера строк. Я предполагаю, что текст, объясняющий код, относится к этим номерам строк. Точно так же в некоторых книгах и документах перечисляются все математические термины только для ссылок на них в тексте или упрощения цитат.