Компиляторы Java или языки JVM та поддержка goto?

Если вы используете библиотеку кнопок с плавающим действием из https://github.com/Clans/FloatingActionButton , используйте эту

fab.setColorNormal(getResources().getColor(R.color.fab_color1));

5
задан Lucky 14 June 2009 в 14:46
поделиться

9 ответов

JVM поддерживает goto на уровне байт-кода. Если вы используете свой собственный язык, вам следует использовать такие библиотеки, как BCEL или ASM , а не создавать файл .java.

9
ответ дан 18 December 2019 в 07:56
поделиться

Байт-код JVM содержит инструкцию goto (например, см. Документацию BCEL ).

Не забывайте, что сама Java поддерживает концепцию перехода к меткам с использованием :

break {labelname}

или

continue {labelname}

См. Этот технический совет JDC для получения дополнительной информации. Если ваш язык скомпилирован в байт-код JVM, возможно, вы сможете его использовать.

5
ответ дан 18 December 2019 в 07:56
поделиться

По определению ни один компилятор Java не допускает goto. Компиляторы Java должны реализовывать JLS , а JLS не допускает gotos. Однако также очевидно, что можно скомпилировать язык с gotos для JVM. AMPC - это компилятор C-to-JVM, который утверждает, что поддерживает C89.

Также обратите внимание, что в байт-коде Java есть инструкция перехода, хотя она, очевидно, основана на инструкциях, а не на строках.

2
ответ дан 18 December 2019 в 07:56
поделиться

Практически все, что можно сделать с помощью goto, можно сделать с помощью цикла. goto - действительно избыточный и обычно дискредитируемый способ программирования. IMHO.

Если вы хотите перейти назад

LABEL: do {
// code before goto

// goto LABEL
continue LABEL;

// code after goto
break;
} while(true);

Если вы хотите перейти вперед

LABEL: do {
// code before goto

// goto LABEL
continue LABEL;

// code after goto
break;
} while(false);
// Label is effectively here
// code after LABEL.
2
ответ дан 18 December 2019 в 07:56
поделиться

Вы можете написать свой генератор кода для целевого Jasmin . Вы можете использовать goto в Jasmin сколько угодно. : -)

2
ответ дан 18 December 2019 в 07:56
поделиться

Ключевое слово goto зарезервировано, но не используется в языке программирования Java. (Из Раздел 3.9 из Спецификация языка Java .)

Таким образом, по крайней мере, в языке программирования Java нет возможности разрешить использование goto .

Однако, как уже отмечалось, код операции goto в виртуальной машине Java является функциональным и используется, когда компилятор Java создает байт-код из источника.

Глава 7: Компиляция для виртуальной машины Java из Спецификация виртуальной машины Java может представлять интерес при реализации языка JVM.

1
ответ дан 18 December 2019 в 07:56
поделиться

Никогда не используйте goto, это ЗЛО; -)

А если серьезно, может быть, вам стоит взглянуть на знаменитую статью Э. Дейкстры: http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html

-1
ответ дан 18 December 2019 в 07:56
поделиться

Apache Thrift можно использовать для генерации исходного кода на разных языках программирования из одного источника. http://incubator.apache.org/thrift/

0
ответ дан 18 December 2019 в 07:56
поделиться

Java не позволяет использовать ключевое слово goto . Однако он позволяет использовать метки и использовать break или continue с меткой вместо goto . Фактически, Java - это не язык без оператора goto, а язык с неудобной его реализацией.

0
ответ дан 18 December 2019 в 07:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: