Итак, можно прочитать байт-код для реализации интерпретатора/JVM. Можно писать/генерировать байт-код при реализации компилятора Java или компилятора для другого языка, который будет нацелен на JVM (например, Scala и Jython). Вы можете выполнять манипулирование байт-кодом для оптимизации байт-кода (если вы хотите создавать и продавать оптимизатор байт-кода или вам нужен он как внутренний инструмент, чтобы дать коду вашей компании преимущество над конкурентами). В аналогичном ключе вы можете манипулировать байт-кодом, чтобы запутать его до распространения. Вы также можете выполнить манипулирование байт-кодом для aspect-oriented programming; например, вы можете захотеть вставить крючки (возможно, для синхронизации или ведения журнала или по какой-либо другой причине), и если было проще или дешевле манипулировать байт-кодом, чем редактировать все исходные файлы (например, может быть, если исходный код недоступен или из разных источников, не все из которых могут находиться под контролем или для которых может быть дорогостоящим и трудоемким, чтобы убедить эти команды добавить такие перехватчики), это может быть случай, когда он будет смысл вносить изменения в конечный выход байт-кода, а не пытаться изменить исходный код (который может потребовать восхождения или поддержки отдельной вилки или покупки исходного кода от третьей стороны, которая поставляет только байт-код).
Вы можете манипулировать байт-кодом самостоятельно, хотя для его создания существует множество существующих библиотек с открытым исходным кодом и фреймворков, в том числе BCEL и ASM, чтобы назвать только пару.
Возможно, я должен был быть более ясным. Я уже знаю эти библиотеки, и я знаю, как работает Java на уровне байт-кода. То, что я действительно хочу знать, это то, что классные приемы люди придумали, чтобы делать то, что вы не могли бы сделать иначе, поэтому я имею эти решения в виду, когда я спотыкаюсь о таких проблемах. – ahe