【发布时间】:2011-07-27 04:32:07
【问题描述】:
我看不到源代码,而是看到 .class 文件。 导入的文件还能查到吗?
【问题讨论】:
-
“进口”是什么意思?
标签: java
我看不到源代码,而是看到 .class 文件。 导入的文件还能查到吗?
【问题讨论】:
标签: java
好吧,如果你只是想手动做的话,我建议你看看JD GUI之类的反编译器
否则,如果您希望以编程方式获取此信息,则需要采用反射方式。
【讨论】:
请记住,导入只是一种便利机制,它让 Java 开发人员可以使用简单名称 (Date) 而不是完全限定名称 (FQN - java.util.Date 或 java.sql.Date) 来引用类。
因此,如果您运行 .class 文件 through a decompiler,您可能会看到使用 FQN 的引用,并且可能没有导入语句。
【讨论】:
如果您需要批量执行此操作,并且不想打扰反编译器提供的所有其他细节,您可以检查常量池以查找类引用。
请注意,如前所述,源导入只是为了方便,并不直接对应于类文件中的任何内容。扫描常量池将不显示源文件中未使用的导入,并且不显示仅用于编译时常量(public static final String ... 等)的类。它将显示FQN,即使是同一包中的类,它将显示使用FQN引用的类而无需导入。它将显示隐式使用其签名的类:
URL loc = Something.class.getProtectionDomain().getCodeSource().getLocation();
将在字节码中生成对 ProtectionDomain 和 CodeSource 的引用,即使源没有明确提及它们。
https://hg.netbeans.org/core-main/raw-file/default/nbbuild/antsrc/org/netbeans/nbbuild/VerifyClassLinkage.java 是如何进行此扫描的示例(请参阅dependencies 方法)。
【讨论】: