【问题标题】:is there difference between classes compiled with java 1.5 and 1.5.0_06用 java 1.5 和 1.5.0_06 编译的类之间有区别吗
【发布时间】:2011-06-14 09:35:29
【问题描述】:

我已经用 java 1.5 版本编译了一个类。

当我将它部署在服务器中时,它给了我错误的版本错误。

如果我使用 java 版本 1.5.0_06 编译它,如果服务器具有版本 1.5.0_06 的 java,那会有所不同

1.版本中的最后一个数字也有区别吗??

2.javap -verbose <i>ClassName</i> 给了我次要和主要版本,但如何知道该类是使用哪个更新编译的??

谢谢, 桑迪普

【问题讨论】:

  • 在不相关的注释中:Java 1.5.0_06 是 ANCIENT。它于 2005 年 12 月发布!您应该至少更新到 Java 5 的最新版本,否则您的安全漏洞将比一般谷仓门还大。

标签: java version javap


【解决方案1】:

JRE/JDK 1.5.0_06 是 Java 1.5(或 Java 5,取决于星期几)的实现。

所以不,没有区别,为 Java 1.5 编译的类在该版本上应该可以正常工作。

类版本不会告诉您编译该类时使用的 JDK 的哪个更新,而且这些信息也不应该是相关的。

【讨论】:

  • 感谢您的快速回复...但服务器抛出错误。我已经使用 javap 检查了服务器中的其他应用程序,它们显示相同的次要:0 主要:49,因为我的类文件也显示相同,即使它抛出了错误的类版本错误...
  • Major: 49 对于 Java 5 编译(和/或用于)Java 5 的类是正确的。
【解决方案2】:

使用 JDK 1.5 和 JDK 1.5.0_06 编译一个类(任何类)。然后比较用 1.5 编译的那个的主/次版本和用 1.5.0_06 编译的那个。如果它们相同,您应该可以在使用 Java 1.5.0_06 的服务器上运行用 1.5 编译的类。否则你不能。

【讨论】:

  • 实际上我确实听过你说次要版本和主要版本相同但服务器抛出错误..我无法猜测...奇怪...
  • @Sandeep:我猜你没有部署你认为你正在部署的东西。
  • @Sandeep:也许你的项目所依赖的 JAR 文件之一是用 Java 6 编译的。
【解决方案3】:

1.版本中的最后一个数字也有区别吗??

没有。它不应该。但是,由于版本差异较小,我在运行时遇到了问题。经进一步调查,发现是由于对API的理解不完全所致。开发人员期望obj.getClass().getFields() 按声明顺序返回字段,并且在一个版本中以这种方式工作。在较新的更新中,它以不同的顺序返回字段。 API 明确表示“返回的数组中的元素没有排序,也没有任何特定的顺序。”
故事寓意:始终在完全相同的 Java 版本上进行开发、测试和部署。

2.javap -verbose ClassName 给了我次要和主要版本,但是如何 知道类是哪个更新 编译用??

你不能。类文件甚至不携带该信息。查看类文件格式:http://en.wikipedia.org/wiki/Java_class_file

您遇到的问题看起来很奇怪。如果您得到解决方案,请发布您的解决方案。

【讨论】:

    猜你喜欢
    • 2013-10-08
    • 1970-01-01
    • 2011-05-22
    • 2016-02-06
    • 2012-02-16
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多