小编Nic*_*man的帖子

Java二进制兼容性发生了什么变化?

我在1997年3月遇到了一组旧的课程.那是在我尝试学习Java的时候,它是JDK 1.0.2

有趣的是,从那时起我的源文件和类文件都完好无损.源仍然按预期编译和执行,这真的很酷.但Java不应该保留二进制兼容性吗?好吧,在某个地方,格式不再有效.Java 8 VM将报告;

Exception in thread "main" java.lang.ClassFormatError: Invalid start_pc 65535 in LocalVariableTable in class file bali/core/Application
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    :
    [snip many ClassLoader calls]
    :
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
Run Code Online (Sandbox Code Playgroud)

违规类是我从命令行调用的类的超类.

还有一个细节,在那些日子里,微软仍然在Java阵营中,我记得他们的javac更符合严格的语法.Sun编译器很乐意接受"公共同步类Abc"和许多其他无效语句.因此,这些类文件很可能是由MS编译器生成的,然后在Sun JVM上运行.

无论如何,我的问题是; 是否有人知道Java早期版本中的兼容性承诺?这是一个大问题,还是故意牺牲?或者是否有更晚的决定,比如说Java 1.4或Java 5只是简单地丢弃JDK 1.0支持?

java history

19
推荐指数
1
解决办法
324
查看次数

标签 统计

history ×1

java ×1