当前位置: 首页 > 面试题库 >

如何找到已编译类的目标Java版本?

高运诚
2023-03-14
问题内容

如果我有一个已编译的Java类,是否可以仅从类文件中知道其目标版本兼容性是什么?具体来说,我有许多编译成Java 6的类文件,它们在Java
5下运行,并显示“无法识别的版本”错误。我希望能够在不运行JVM的情况下查看类文件并查找其目标版本兼容性。有任何想法吗?


问题答案:

我已经在网上找到了它并且可以使用。

每个“ .class”文件都以以下内容开头:

  • 幻数[4字节]
  • 版本信息[4字节]

使用以下每个选项编译的“ .class”文件的十六进制转储显示:

javac -target 1.1==> CA FE BA BE 00 03 00 2D
javac -target 1.2==> CA FE BA BE 00 00 00 2E
javac -target 1.3==> CA FE BA BE 00 00 00 2F
javac -target 1.4==>CA FE BA BE 00 00 00 30

也许您可以使用此信息来编写自己的’.class’文件版本检查实用程序,使用Java或脚本或Shell语言;)!

我希望这有帮助。

安东尼·波拉(Anthony Borla)

来自:http : //bytes.com/groups/java/16603-how-determine-java-bytecode-
version



 类似资料:
  • 问题内容: 我知道,这里已经问过许多类似的问题。我不是在问我是否可以保护编译的Java类- 因为显然您会说“不,您不能”。我问的是最著名的保护Java类免于反编译的方法是什么?如果您知道该领域的任何研究或学术论文,请告诉我。另外,如果您使用过某些方法或软件,请分享您的经验吗?任何种类的信息都将非常有用。谢谢。 问题答案: 首先,如果你的目标“只” Windows的市场有一个非常简单的防止“的.cl

  • Java版本: IDE: 火狐版本:

  • 我可能会对遗留项目进行一些交叉编译,并且在最近的JDK中我注意到,对于、和JVM参数,我们仅限于一些特定的版本。 如何获得这些参数的支持版本?

  • 问题内容: 运行Selenium脚本时,我在Eclipse控制台中收到以下错误消息: 类是由Java环境的最新版本(类文件版本53.0)编译的,此版本的Java运行时仅可识别52.0以下的类文件版本。 Java版本: IDE: Firefox版本: 问题答案: 这只是版本不匹配。您已经使用Java版本9编译了代码,而当前的JRE是版本8。请尝试将JRE升级到9。

  • 我用的是Spring靴2。在多java项目中。 我尝试构建我的主库(还没有java文件) 在我的gradle/wrapper中,我有 我得到的错误 原因:org.gradle.api.internal.plugins.PluginApplicationException:无法应用插件[id'org.springframework.boot'] 原因:org.gradle.api。GradleExc

  • 问题内容: 我想将我的.java(几个)编译成至少与Java 兼容的,较新的(最好是较新的)版本。(我有) 问题答案: 是的,您可以在编译时设置编译器的版本。并将您的Java代码编译为Java的旧版本。 从Oracle文章:http : //docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html 交叉编译示例 在这里,我们使用ja