Как получить доступ к членам файла класса JVM и прочитать их? - PullRequest
0 голосов
/ 18 апреля 2011

Я не очень знаком с JVM, и у меня есть задание, связанное с файлом Class.

Напишите java-программу, которая при запуске будет иметь вид

java DissectClassFile file1.class file2.class ...  

будет выводить сводку каждого файла класса следующим образом:
имя класса, определенного файлом класса,
его суперкласс и реализуемые им интерфейсы,
количество элементов в константеpool
число интерфейсов, реализованных классом, и их имена,
количество полей класса, имена которых содержат символ подчеркивания,
количество методов класса, имена которых содержат не менееодна заглавная буква

С самого начала я не знаю, с чего начать.Если бы кто-то мог помочь мне и указать мне правильное направление, я должен научиться этому.

Ответы [ 3 ]

2 голосов
/ 18 апреля 2011

Вам необходимо прочитать Спецификацию виртуальной машины Java .Содержит объяснение формата файла класса .

1 голос
/ 18 апреля 2011

Большую часть этой информации легко получить, загружая каждый класс, используя Class.forName(...) и используя API-интерфейсы отражения для поиска информации. Однако постоянный размер пула является убийцей. AFAIK, это можно определить только из самого файла класса.

Итак, ваши варианты выглядят так:

  • Напишите кучу кода для чтения и декодирования файлов классов. В спецификации JVM содержатся сведения о формате файла класса .
  • Используйте существующую библиотеку, такую ​​как BCEL , чтобы позаботиться о низкоуровневом разборе файлов классов.
  • Используйте гибридный разбор файлов классов (используя любой из вышеперечисленных) для извлечения постоянного размера пула и API-интерфейсов отражения для остальных.

Я предполагаю, что ваше задание намекает на то, в каком направлении они ожидают вас. Но если нет, я бы сначала посмотрел на подход BCEL.

1 голос
/ 18 апреля 2011

Существует класс java.lang.Class для доступа к этой информации.Для каждого класса вы можете вызвать MyClass.class (например, String.class), чтобы получить объект с информацией для этого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...