我对JVM不是很熟悉,我有一个涉及Class文件的作业。
编写一个以
运行的java程序java DissectClassFile file1.class file2.class ...
它将打印每个类文件的摘要,如下所示:
由类文件定义的类的名称,
它实现的超类和接口,
常量池中的项目数,
该类实现的接口数量及其名称,
名称中包含下划线字符的类的字段数,
名称中包含至少一个大写字母的类的方法数
马上,我不知道从哪里开始。如果有人可以帮助我并指出我正确的方向,我应该掌握它。
答案 0 :(得分:2)
您需要阅读Java Virtual Machine Specification。它包含class file format的解释。
答案 1 :(得分:1)
有一个java.lang.Class类可以访问该信息。对于每个类,您可以调用MyClass.class(例如,String.class)来获取包含该类信息的对象。
答案 2 :(得分:1)
使用Class.forName(...)
并使用反射API来捕获信息,可以轻松地收集每个类的大部分信息。 然而常量池大小是杀手。 AFAIK,这只能从类文件本身确定。
所以,您的选择似乎是:
我想你的作业暗示他们希望你走哪条路。但如果没有,我会先看看BCEL方法。