Инструмент для проверки имени пакета и имени класса класса в файле .class.

Есть ли какой-нибудь инструмент или метод, позволяющий мне запрашивать содержимое файла Java .class? Я хочу знать полное имя класса и какой метод он определяет. Я думал, что, возможно, javap мог бы мне помочь с этим, но я не могу понять, как это сделать.


person Arlaharen    schedule 13.10.2010    source источник
comment
файл Java .class содержит один и только один класс ... вопреки тому, что вы, кажется, ожидаете, исходя из заголовка вопроса.   -  person Stephen C    schedule 13.10.2010
comment
@Стивен С: Хорошо. Всегда ли класс, содержащийся в файле .class, совпадает с именем файла (за исключением .class), даже если я использую другой язык, например Groovy, Jython или Scala?   -  person Arlaharen    schedule 13.10.2010


Ответы (3)


Всегда ли класс, содержащийся в файле .class, совпадает с именем файла (за исключением .class)

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

Теоретически загрузчик классов может использовать какой-то другой механизм и, следовательно, может хранить классы в файлах, которые не имеют никакого отношения к именам классов. Однако я не вижу в этом никаких преимуществ.

даже если я использую другой язык, например Groovy, Jython или Scala?

Учитывая, что эти языки компилируются в файлы байт-кода, которые затем загружаются стандартными загрузчиками классов, то в значительной степени дано, что имена классов в файлах байт-кода соответствуют путям к файлам... иначе загрузчики классов не смогли бы найти файлы класса. Однако это не обязательно означает, что имена классов в файлах байт-кода идентичны идентификаторам Scala/Jython/Grovy, используемым в исходном коде. На самом деле, это даже не верно для Java; например имена файлов классов для анонимных и внутренних классов не совпадают с идентификаторами в исходном коде Java.

person Stephen C    schedule 14.10.2010

Позвоните javap ClassName (не javap ClassName.class).

Если ваш .class только для javap ClassName
Если ваш .class находится в подпапке javap path/to/ClassName или javap path.to.ClassName


Ресурсы:

person Colin Hebert    schedule 13.10.2010

Попробуйте этот декомпилятор Java. Должен дать вам информацию, которую вы хотите.

person Vetle    schedule 13.10.2010