Что такое альтернативная функция для goto ключевого слова в Java?
Так как Java не имеет goto.
Вы можете использовать оператор с пометкой BREAK :
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length; j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
Однако в правильно спроектированном коде вам не нужна функциональность GOTO.
В Java нет прямого эквивалента концепции goto
. Есть несколько конструкций, которые позволяют делать некоторые вещи, которые вы можете делать с классическим goto
.
break
и continue
позволяют вам выйти из блока в операторе цикла или switch. break
позволяют вам перейти из произвольного составного оператора на любой уровень в рамках данного метода (или блока инициализатора). continue
, чтобы продолжить следующую итерацию внешнего цикла из внутреннего цикла. return
. Ни одна из этих конструкций Java не позволяет выполнить переход назад или к точке кода на том же уровне вложенности, что и текущий оператор. Все они выпрыгивают из одного или нескольких уровней вложенности (области видимости), и все они (кроме continue
) прыгают вниз. Это ограничение помогает избежать синдрома «спагетти-кода» перехода, присущего старым кодам BASIC, FORTRAN и COBOL 2 .
1- Самая дорогая часть исключений - это фактическое создание объекта исключения и его трассировки стека.Если вам действительно действительно нужно использовать обработку исключений для «нормального» управления потоком, вы можете либо предварительно выделить / повторно использовать объект исключения, либо создать собственный класс исключения, который переопределяет метод fillInStackTrace ()
. Обратной стороной является то, что методы исключения printStackTrace ()
не дадут вам полезной информации ... если вам когда-нибудь понадобится их вызвать.
2 - Синдром спагетти-кода породил подход структурного программирования , при котором вы ограничивали использование доступных языковых конструкций. Это можно было применить к BASIC , Fortran и COBOL , но это требовало осторожности и дисциплины. Полное избавление от goto
было прагматически лучшим решением. Если вы сохраните это на языке, всегда найдется какой-нибудь клоун, который будет злоупотреблять этим.
Просто для удовольствия, здесь является реализацией GOTO на Java.
Пример:
1 открытый класс GotoDemo { 2 общедоступных статических пустых main(String[] args) { 3 int i = 3; 4 System.out.println(i); 5 i = i - 1; 6 если (i >= 0) { 7 GotoFactory.getSharedInstance().getGoto().go(4); 8 } 9 10 проб { 11 System.out.print(«Ад»); 12, если (Math.random() > 0) создать новое исключение(); 13 System.out.println("Мир!"); 14 } catch (Исключение e) { 15 System.out.print("o"); 16 GotoFactory.getSharedInstance().getGoto().go(13); 17 } 18 } 19 }
Запуск:
$ java -cp bin:asm-3.1.jar GotoClassLoader GotoDemo 3 2 1 0 Всем привет!
Нужно ли добавлять "не используйте!"?
Если вам действительно нужно что-то вроде операторов goto, вы всегда можете попробовать перейти к именованным блокам.
Вы должны находиться в пределах блока, чтобы перейти к метке:
namedBlock: {
if (j==2) {
// this will take you to the label above
break namedBlock;
}
}
Я не буду читать вам лекцию о том, почему вы должны избегать goto - я предполагаю, что вы уже знаете ответ на этот вопрос.