我已经用 java 1.5 版编译了一个类。
当我将它部署在服务器中时,它给了我错误的版本错误。
如果我使用 java 版本 1.5.0_06 编译它,如果服务器具有版本 1.5.0_06 的 java,那会有所不同
1.版本中的最后一个数字也有区别吗?
2. 给了我次要和主要版本,但如何知道类是用哪个更新编译的?javap -verbose ClassName
谢谢,桑迪普
JRE/JDK 1.5.0_06 是 Java 1.5(或 Java 5,取决于星期几)的实现。
所以不,没有区别,为 Java 1.5 编译的类在该版本上应该可以正常工作。
类版本不会告诉您编译该类时使用的 JDK 更新,并且该信息也不应该是相关的。
1.版本中的最后一个数字也有区别吗?
不,不应该。但是,由于版本差异较小,我在运行时遇到了问题。经进一步调查,发现是由于对API了解不完全所致。开发人员希望obj.getClass().getFields()
按照声明的顺序返回字段,并且在一个版本中以这种方式工作。在较新的更新中,它以不同的顺序返回字段。API 明确表示“返回的数组中的元素没有排序,也没有任何特定的顺序。”
故事的寓意:始终在完全相同的 Java 版本上进行开发、测试和部署。
2.javap -verbose ClassName 给了我次要和主要版本,但是如何知道类是用哪个更新编译的?
你不能。类文件甚至不携带该信息。查看类文件格式:http ://en.wikipedia.org/wiki/Java_class_file
您遇到的问题看起来很奇怪。如果您得到解决方案,请发布您的解决方案。
使用 JDK 1.5 和 JDK 1.5.0_06 编译一个类(任何类)。然后比较用 1.5 编译的那个的主/次版本和用 1.5.0_06 编译的那个。如果它们相同,您应该可以在使用 Java 1.5.0_06 的服务器上运行用 1.5 编译的类。否则你不能。