У Java ByteCode есть "косвенный переход"?
Если я не ошибся, кажется, что весь поток управления байт-кодом в Java
лайк
ifeq
goto
и другие инструкции прямого прыжка.
мои вопросы, есть ли какие-либо инструкции "косвенного перехода" в Java?
И если нет, то как я могу имитировать "косвенный переход" в Java с помощью кода JavaByte, как в сборке, мы можем сделать это:
goto address; // we can only know address at runtime
Спасибо
------------------Обновить--------------------------
По сути, я пытаюсь изменить поток управления во время выполнения, но поскольку назначение байт-кода потока управления жестко закодировано при компиляции, это кажется невозможным.
3 ответа
Косвенный переход не сможет выполнить проверку байт-кода. Прочтите о том, как проверяются файлы классов (в спецификации JVM), и вы поймете, почему.
В частности, следующее было бы невозможно проверить:
Целью всех команд потока управления должен быть запуск инструкции (без перехода в середину инструкции)
Стек должен быть согласованным (одинаковой высоты и типов значений) в конкретной инструкции, независимо от того, как ВМ достигла этой точки.
РЕДАКТИРОВАТЬ: Полностью принял вопрос неправильно. (Увидеть ниже)
Поддержка JVM goto на уровне байт-кода. Вам просто нужны библиотеки, такие как
BCEL
Оригинальный ответ, на goto
в исходном коде:
Первоначально Java имел операторы goto, но в более поздних версиях его не было. Я думаю, что возможная причина может быть goto
является ненужным, и его можно заменить более читаемыми утверждениями
Ключевое слово goto существует, но оно не реализовано.
Посмотри это интересное видео Джеймса Гослинга
Любая форма вызова метода является "косвенным переходом" по вашему определению.