Есть ли какой-нибудь инструмент или метод, позволяющий мне запрашивать содержимое файла Java .class? Я хочу знать полное имя класса и какой метод он определяет. Я думал, что, возможно, javap
мог бы мне помочь с этим, но я не могу понять, как это сделать.
Инструмент для проверки имени пакета и имени класса класса в файле .class.
Ответы (3)
Всегда ли класс, содержащийся в файле .class, совпадает с именем файла (за исключением .class)
На практике да. Каждая реализация Java, с которой я сталкивался, полагается на пути к файлам классов, чтобы найти классы для загрузки и т. д.
Теоретически загрузчик классов может использовать какой-то другой механизм и, следовательно, может хранить классы в файлах, которые не имеют никакого отношения к именам классов. Однако я не вижу в этом никаких преимуществ.
даже если я использую другой язык, например Groovy, Jython или Scala?
Учитывая, что эти языки компилируются в файлы байт-кода, которые затем загружаются стандартными загрузчиками классов, то в значительной степени дано, что имена классов в файлах байт-кода соответствуют путям к файлам... иначе загрузчики классов не смогли бы найти файлы класса. Однако это не обязательно означает, что имена классов в файлах байт-кода идентичны идентификаторам Scala/Jython/Grovy, используемым в исходном коде. На самом деле, это даже не верно для Java; например имена файлов классов для анонимных и внутренних классов не совпадают с идентификаторами в исходном коде Java.
Позвоните javap ClassName
(не javap ClassName.class
).
Если ваш .class
только для javap ClassName
Если ваш .class
находится в подпапке javap path/to/ClassName
или javap path.to.ClassName
Ресурсы:
Попробуйте этот декомпилятор Java. Должен дать вам информацию, которую вы хотите.