Я встретил старый набор классов от марта 1997 года. Это было в то время, когда я пытался изучить 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)
Класс-нарушитель является суперклассом класса, который я вызываю из командной строки.
Еще одна деталь, в те времена, Microsoft все еще находилась в лагере Java, и я помню, что их javac был более совместим с плохо написанным синтаксисом. Компилятор Sun с радостью примет "общедоступный синхронизированный класс Abc" и многие другие недопустимые операторы. Таким образом, существует большая вероятность того, что эти файлы классов были сгенерированы компилятором MS и затем запущены на Sun JVM.
Во всяком случае, мой вопрос: Есть ли кто-нибудь, кто знает о приверженности совместимости в ранних версиях Java? Было ли это грандиозным событием, или его жертвовали нарочно? Или было решение гораздо позже, скажем, Java 1.4 или Java 5, чтобы просто отказаться от поддержки JDK 1.0?