Есть ли инструкция goto в Java?
Я смущен этим. Большинству из нас сказали, что на Java нет инструкции goto.
Но я обнаружил, что это одно из ключевых слов в Java. Где его можно использовать? Если он не может быть использован, то почему он был включен в Java в качестве ключевого слова?
ОТВЕТЫ
Ответ 1
список ключевых слов Java определяет ключевое слово goto , но помечается как «не используется».
Это было в оригинальной JVM (см. ответ от @VitaliiFedorenko), но затем удалили. Вероятно, это было сохранено как зарезервированное ключевое слово, если оно должно быть добавлено к более поздней версии Java.
Если goto не было в списке, и позже он добавляется к языку, существующий код, который использовал слово goto в качестве идентификатора (имя переменной, имя метода и т.д.), будет разбит. Но поскольку goto — это ключевое слово, такой код даже не будет компилироваться в настоящем, и остается возможным сделать это на самом деле позже, без нарушения существующего кода.
Ответ 2
Джеймс Гослинг создал оригинальную JVM с поддержкой операторов goto , но затем он удалил эту функцию как ненужную. Основная причина goto не нужна, так как обычно ее можно заменить более читаемыми операциями (например, break/continue ) или путем извлечения фрагмента кода в метод.
Ответ 3
Чтобы люди не погибли от велоцирапторов.
Ответ 4
Ключевое слово существует, но оно не реализовано.
Единственная веская причина использовать goto, о которой я могу думать, это:
for (int i = 0; i < MAX_I; i++) < for (int j = 0; j < MAX_J; j++) < // do stuff goto outsideloops; // to break out of both loops >> outsideloops:
В Java вы можете сделать это вот так:
Ответ 5
«Ключевые слова const и goto являются если они не в настоящее время используется.»
Ответ 6
Таким образом, их можно было использовать в один прекрасный день, если бы разработчики языка почувствовали необходимость.
Кроме того, если программисты с языков, которые имеют эти ключевые слова (например, C, С++), используют их по ошибке, тогда компилятор Java может дать полезное сообщение об ошибке.
Или, может быть, просто остановить программистов с помощью goto:)
Ответ 7
Они зарезервированы для будущего использования (см.: Ключевые слова языка Java)
Ключевые слова const и goto зарезервированы, хотя в настоящее время они не используются.
Причину отсутствия оператора goto в Java можно найти в » Языковой среде Java «:
У Java нет оператора goto. Исследования показали, что goto (неправильно) используется чаще, чем просто «потому что оно есть». Исключение goto привело к упрощению языка — например, нет никаких правил о влиянии goto на середину оператора for. Исследования примерно 100 000 строк кода на C показали, что примерно 90 процентов операторов goto были использованы исключительно для получения эффекта разрыва вложенных циклов. Как уже упоминалось выше, многоуровневый разрыв и продолжение устраняют большую часть необходимости в операторах goto.
Ответ 8
Пример использования меток «continue» в Java:
public class Label < public static void main(String[] args) < int temp = 0; out: // label for (int i = 0; i < 3; ++i) < System.out.println("I am here"); for (int j = 0; j < 20; ++j) < if(temp==0) < System.out.println("j: " + j); if (j == 1) < temp = j; continue out; // goto label "out" >> > > System.out.println("temp post-104 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized"> Ответ 9
Нет, goto
не используется, но вы можете определить метки и оставить цикл до метки. Вы можете использовать break
или continue
, за которым следует метка. Таким образом, вы можете выпрыгнуть более чем на один уровень петли. Посмотрите учебник.
Ответ 10
Важно понимать, что конструкция goto
осталась в стороне от тех дней, когда программисты запрограммированы в машинных кодах и ассемблере. Поскольку эти языки являются такими основными (как в, каждая команда выполняет только одну вещь), поток управления программой выполняется полностью с помощью операторов goto
(но на языке ассемблера они называются jump или branch).
Теперь, хотя язык C довольно низкоуровневый, его можно рассматривать как очень высокоуровневый язык ассемблера - каждый оператор и функция в C можно легко разбить на инструкции ассемблера. Хотя C не является основным языком для программирования компьютеров с сегодняшнего дня, он по-прежнему широко используется в низкоуровневых приложениях, таких как встроенные системы. Поскольку функция C так тесно отражает функцию языка ассемблера, имеет смысл только, что goto
включен в C.
Понятно, что Java - это эволюция C/С++. Java имеет множество функций от C, но реферат гораздо больше деталей, и поэтому он просто написан по-разному. Java - очень высокоуровневый язык, поэтому просто не нужно иметь низкоуровневые функции, такие как goto
, когда более высокоуровневые конструкции, такие как функции, для каждого, и в то время как циклы выполняют поток управления программой. Представьте, что вы были в одной функции и сделали goto
метку в другую функцию. Что произойдет, когда другая функция вернется? Эта идея абсурдна.
Это не обязательно ответ на вопрос, почему Java включает в себя оператор goto
, но не позволяет его компилировать, но важно знать, почему goto
когда-либо использовался, в приложениях более низкого уровня, и почему это просто не имеет смысла для использования в Java.
Ответ 11
Java имеет GOTO на уровне байт-кода как goto
и goto_w
. Однако на языке Java отсутствует GOTO.
Хотя Java запрещает GOTO, Microsoft решила сохранить его в арсенале .NET. С# позволяет GOTO:
goto (ссылка на С#)
Оператор goto передает управление программой непосредственно на помеченную выражение. Общее использование goto заключается в передаче управления конкретному метку коммутатора или метку по умолчанию в инструкции переключателя. Переход оператор также полезен для выхода из глубоко вложенных циклов.
Учитывая, что С# (главный конкурент Java в .NET) позволяет GOTO, я не понимаю, почему это было бы так дорого, если бы у Java тоже было это.
Существуют обходные пути, такие как этот проект:
JavaGoto
Это пригодится при преобразовании устаревшего кода. Например, некоторый старый код Fortran настолько запутан, что сохранение целостности GOTO может быть наиболее эффективным решением перед переносом кода в соответствующие конструкции.
Допуск Goto в С# не привел к злоупотреблению GOTO, и я сомневаюсь, что Java будет хуже, если бы они тоже допустили это.
Ответ 12
Нет, к счастью, в Java нет goto
.
Ключевое слово goto
зарезервировано, но не используется (то же самое относится к const
).
Ответ 13
Потому что он не поддерживается и почему вы хотите, чтобы ключевое слово goto
ничего не делало или переменная с именем goto
?
Хотя вы можете использовать операторы break label;
и continue label;
, чтобы эффективно выполнять то, что делает goto
. Но я бы не рекомендовал его.
public static void main(String [] args) < boolean t = true; first: < second: < third: < System.out.println("Before the break"); if (t) < break second; >System.out.println("Not executed"); > System.out.println("Not executed - end of second block"); > System.out.println("End of third block"); > >
Ответ 14
Нет, goto не используется в Java, несмотря на то, что это зарезервированное слово. То же самое верно для const . Оба они используются в С++, что, вероятно, является причиной их сохранения; возможно, целью было избежать путаницы программистов на С++, переносящихся на Java, и, возможно, также сохранить возможность использования их в последующих версиях Java.
Ответ 15
Как было указано, в Java нет goto , но ключевое слово было зарезервировано в том случае, если Sun почувствовал, что однажды добавит goto в Java. Они хотели иметь возможность добавить его, не разбирая слишком много кода, поэтому они зарезервировали ключевое слово. Обратите внимание, что с Java 5 они добавили ключевое слово enum , и он тоже не сломал этот код.
Хотя Java не имеет goto , он имеет некоторые конструкции, которые соответствуют некоторым использованиям goto , а именно возможность break и continue с именованными циклами. Кроме того, finally можно рассматривать как своего рода скрученный goto .
Ответ 16
Запретить объявления переменных с тем же именем.
Ответ 17
См. следующую ссылку: отображает все зарезервированные слова java и сообщает, какие версии они добавили.
goto зарезервирован, хотя он в настоящее время не используется, никогда не говорите никогда:)
Ответ 18
Обратите внимание, что вы можете заменить большинство доброкачественных применений goto на
Ответ 19
Он очень считался одной из тех вещей, которые вы не делаете, но, вероятно, был указан как зарезервированное слово, чтобы избежать путаницы для разработчиков.
Ответ 20
Если вам сказали, что в Java нет инструкции goto, вас обманули. Действительно, Java состоит из двух уровней кода "source".
Ответ 21
Я тоже не поклонник goto , поскольку он обычно делает код менее читаемым. Однако я верю, что есть исключения из этого правила (особенно когда речь заходит о лексерах и парсерах!)
Конечно, вы всегда можете принести свою программу в Kleene Normalform, переведя ее на что-то вроде ассемблера, а затем напишите что-нибудь вроде
int line = 1; boolean running = true; while(running) < switch(line++) < case 1: /* line 1 */ break; case 2: /* line 2 */ break; . case 42: line = 1337; // goto 1337 break; . default: running = false; break; >>
(Итак, вы в основном пишете виртуальную машину, которая выполняет ваш двоичный код. где line соответствует указателю инструкции)
Это гораздо более читаемо, чем код, который использует goto , не так ли?
Ответ 22
Потому что, хотя язык Java не использует его, байт-код JVM делает.
Ответ 23
Конечно, это ключевое слово, но оно не используется на уровне исходного кода.
Но если вы используете jasmin или другой язык нижнего уровня, который преобразуется в байт-код, тогда "goto" есть
Ответ 24
goto не находится в Java
вам нужно использовать GOTO Но это не работает правильно. В ключевом java-слове оно не используется. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
public static void main(String[] args) < GOTO me; //code; me: //code; >>
Goto in Java
Java supports structured programming constructs like loops, methods, etc. to organize and understand code better. It doesn’t support the Goto statement. Although it was present in some earlier programming languages, Java has eliminated it to enhance code readability and maintainability. In Java, “label” can be utilized instead of the Goto statement.
This post will provide the Java equivalent of the Goto statement along with suitable examples.
Goto in Java
Like other programming languages, including C or C++, Java doesn’t support the Goto statement. However, it supports “labels” that can be used in place of the Goto statement. In Java, labels can be used before nested loops, and the “break” keyword can be used with the label to break/jump out of a specific outer loop. Ultimately, it allows better control over the loop execution. Furthermore, the labels can also be used with the continue keyword.
For practical demonstration, check out the below-stated examples.
Example 1: Label With “break” Keyword
To set the label with the “break” keyword, first of all, specify a label named “outer” inside the Java “main()” method:
In this stated code snippet, we will iterate the elements through the “for” loop. Then, inside the loop invoke the “print()” method to show/print the resultant output. Furthermore, add another “for” iterator and test the condition using the “if” statement. When the condition is evaluated according to the specified value, the “break” keyword will terminate the loop:
for ( int i = 0 ; i < 3 ; i++ ) {
System.out.print ( "Pass " + i + ": " ) ;
for ( int j = 1 ; j < 50 ; j++ ) {
if ( j == 20 ) {
break outer;
}
System.out.print ( j + " " ) ;
}
System.out.println ( "Not printed" ) ;
}
Then, invoke the “println()” for printing the “Complete Loop” message on the screen:
It can be observed that the loop is terminated when the condition is evaluated as true:
Example 2: Label With “continue” Keyword
You can also utilize the label along with the continue keyword to iterate the outer loop according to the given condition. To do so, first, specify the “outer” label:
Now, iterate the elements with the help of the “for” loop. Within the “for” iterator, set the condition and use the “continue” keyword along with an “outer” label:
for ( int i = 0 ; i < 10 ; i++ ) {
for ( int j = 0 ; j < 10 ; j++ ) {
if ( j == 2 )
continue outer;
System.out.println ( "j value = " + j ) ;
}
}
That’s all about the Goto or alternative of Goto in Java.
Conclusion
Like many other programming languages, Java does not support the Goto Statement. However, Java programming support labels that can be used as an equivalent of the Goto statement. You can determine the label name along with the “break” keyword to break out the particular outer loop. This post has explained how to achieve the functionality of the Goto statement in Java.