如何访问和读取JVMs类文件成员?

时间:2011-04-17 23:16:53

标签: java class file jvm

我对JVM不是很熟悉,我有一个涉及Class文件的作业。

编写一个以

运行的java程序
java DissectClassFile file1.class file2.class ...  

它将打印每个类文件的摘要,如下所示:
由类文件定义的类的名称,
它实现的超类和接口,
常量池中的项目数,
该类实现的接口数量及其名称,
名称中包含下划线字符的类的字段数,
名称中包含至少一个大写字母的类的方法数

马上,我不知道从哪里开始。如果有人可以帮助我并指出我正确的方向,我应该掌握它。

3 个答案:

答案 0 :(得分:2)

您需要阅读Java Virtual Machine Specification。它包含class file format的解释。

答案 1 :(得分:1)

有一个java.lang.Class类可以访问该信息。对于每个类,您可以调用MyClass.class(例如,String.class)来获取包含该类信息的对象。

答案 2 :(得分:1)

使用Class.forName(...)并使用反射API来捕获信息,可以轻松地收集每个类的大部分信息。 然而常量池大小是杀手。 AFAIK,这只能从类文件本身确定。

所以,您的选择似乎是:

  • 编写一堆代码来读取和解码类文件。 JVM规范包含class file format
  • 的详细信息
  • 使用现有的库(例如BCEL)来处理低级类文件解析。
  • 使用类文件解析的混合(使用上述任一方法)来提取常量池大小,以及其余的反射API。

我想你的作业暗示他们希望你走哪条路。但如果没有,我会先看看BCEL方法。