用于检查.class文件中类的包名称和类名的工具

是否有一些工具或技术让我查询Java .class文件的内容? 我想知道类的完全限定名称以及它定义的方法。 我想也许javap可以帮助我,但我无法弄清楚如何。

.class文件中包含的类是否始终与文件名相同(不包括.class)

在实践中,是的。 我遇到的每个Java实现都依赖于类文件路径名来定位要加载的类等。

理论上,类加载器可以使用其他一些机制,因此可以将类存储在与类名无关的文件中。 但是,我认为这样做没有任何好处。

即使我使用其他语言,如Groovy,Jython或Scala?

鉴于这些语言编译为字节码文件然后由标准类加载器加载,那么字节码文件中的类名对应于文件路径名几乎是给定的…否则类加载器将无法找到类文件。 但是,这并不一定意味着字节码文件中的类名与Scala / Jython / Groovy中的源代码中使用的标识符相同。 实际上,Java甚至都不是这样; 例如,匿名和内部类的类文件名与Java源代码中的标识符不同。

调用javap ClassName (不是javap ClassName.class )。

如果你的.class只是为了javap ClassName
如果您的.class位于子文件夹javap path/to/ClassNamejavap path.to.ClassName


资源:

  • oracle.com – man javap

试试这个Java Decompiler 。 应该给你你想要的信息。