Ответ 1
Код, который вы написали, в порядке. Проблема в том, что AP.class
является поврежденным файлом класса - следовательно, ClassFormatError
.
Сама ошибка означает, что он не смог правильно декодировать постоянный пул, раздел структуры файла класса, который очень похож на таблицу символов. См. и раздел 4.4 спецификации виртуальной машины Java:
Инструкции виртуальной машины Java не зависят от среды выполнения классов, интерфейсов, экземпляров классов или массивов. Вместо этого инструкции относятся к символической информации в таблице
constant_pool
.Все записи
constant_pool
имеют следующий общий формат:cp_info { u1 tag; u1 info[]; }
Каждый элемент таблицы
constant_pool
должен начинаться с 1-байтового тега, указывающего вид записиcp_info
. Содержимое информационного массива зависит от значения тега. Действующие теги и их значения перечислены в Таблица 4.3. За каждым байтом тега должны следовать два или более байта, содержащие информацию о конкретной константе. Формат дополнительной информации зависит от значения тега.
Итак, сама ошибка говорит вам, что класс имеет постоянную запись в таблице пула с недопустимым тегом, а именно 63
. Проверка, указанная выше в таблице 4.3, действительно, , это не соответствует документированному типу cp_info
entry.
Попробуйте перезагрузить AP.class
. Учитывая неясные имена (AP
, а также c
из трассировки стека), я собираюсь предположить, что вы пытаетесь использовать некоторый обфускационный код. Проверьте не только то, что код, с которым вы пытаетесь справиться, не защищен каким-то типом шифрования, но также и то, что любая препроцессия, которую вы выполняете (например, деобфускация), не повреждает данные.