2013-02-28 4 views
1

Ключевое слово «goto» в java не поддерживается. Я где-то где-то читал, что поддерживает в java-байт-коде, и что существует обфускатор, который использовал это для создания нечитаемого кода спагетти. Тем не менее, я не могу найти эту страницу снова, поэтому я задаю этот вопрос здесь: Работает ли ключевое слово goto в скомпилированной форме?goto в java поддерживается?

+0

возможно дубликат (http://stackoverflow.com/questions/992930/ java-compilers-or-jvm-languages-that-support-goto) – Perception

+0

Нет, обходным путем является использование throw/catch. Это позволяет вам вернуться назад. Чтобы отскочить назад, поместите улов в петлю. – QuentinUK

+1

вы можете использовать break/continue с ярлыками, которые очень похожи на (ограниченный) goto. – jtahlborn

ответ

2

да, «Гото» является частью виртуальной машины Java. Многие конструкции зависят от него (например, if/else, while и т. Д.).

Это эквивалент «вызова» на ассемблере.

Но вы правы, он недоступен в исходном коде Java, только в байтовом коде.

Другие языки на jvm могут его реализовать.

Вот страница Jasmin об этом: [? Компиляторы Java или JVM языков, которые поддерживают Гото] https://www.vmth.ucdavis.edu/incoming/Jasmin/ref-_goto.html (опкод является 0xA7)

3

В списке ключевых слов Java указано ключевое слово goto, но сохраняется с сохранением. Значит, он не используется.

Если вы пытаетесь использовать это покажет вам ошибки

Вероятно, это было сделано в случае, если бы оно было добавлено к более поздней версии Java.

Если goto не был в списке, и он был добавлен позднее на язык, существующий код, который использовал слово goto как идентификатор (имя переменной, имя метода и т. Д.), Сломался. Но поскольку goto является ключевым словом, такой код даже не будет компилироваться в настоящем, и остается возможным сделать это на самом деле позже, без нарушения существующего кода.

проверить это видео .. James gosling tell about goto ... он использовал Гото, когда он разработал Java компилятор

+0

Я знаю это. Но если у вас потенциально был java-компилятор, поддерживающий ключевое слово goto, сможет ли jvm запустить код? Поддерживает ли jvm какой-то goto, даже если компилятор этого не делает? – user2097804

+0

Проверьте мое выделенное предложение – Pragnani

+1

@ user2097804: Java bytecode содержит goto, пример можно найти в моем ответе на этот вопрос: [Pre и post increment в цикле for] (http://stackoverflow.com/questions/15115530/pre -and-post-increment-in-a-for-loop/15115624 # 15115624) – jlordo

Смежные вопросы