Поддерживал ли язык Java обратную совместимость исходного кода на протяжении всей своей истории? - PullRequest
7 голосов
/ 03 апреля 2012

Всегда ли Java поддерживала обратную совместимость исходного кода при разработке?

Точнее: с учетом двух версий Java X и Y с X

Или есть ли совместимость только на уровне JVM: например, класс, скомпилированный для JVM 1.2, может быть запущен JVM 5?

Если возможно запустить код Java 2 на Java 5 (или 6, или 7), какие именно шаги я должен выполнить? Компилировать напрямую с компилятором Java 5? Скомпилировать с помощью компилятора Java 2 и запустить на JVM 5?

Ответы [ 6 ]

4 голосов
/ 03 апреля 2012

Sun, а теперь и Oracle, всегда были предельно осторожны с обратной совместимостью в отношении Java.

Двоичная совместимость : Вы должны иметь возможность запускать код Java, скомпилированный с более старыми версиями, на более новых версиях без изменений. Однако могут быть небольшие несовместимости.

Совместимость с исходным кодом : код, изначально написанный для более старой версии JDK, почти всегда должен компилироваться без изменений с использованием нового компилятора Java, но есть ряд небольших несовместимостей. Одним из них является ключевое слово enum, добавленное в Java 5; в старых версиях Java enum был допустимым идентификатором, но не в Java 5. Кроме того, импорт классов из пакета по умолчанию был удален (я думаю, начиная с Java 1.4). Так что вы не можете сделать:

import SomeClassName;

больше на Java 1.4 или новее.

В документации каждого выпуска JDK есть документ о обратной совместимости с предыдущими выпусками, в котором перечислены подробности.

4 голосов
/ 03 апреля 2012

Запуск с Java 1.5 enum стал зарезервированным словом.Таким образом, любой исходный код Java 1.4, содержащий enum, стал неработоспособным, начиная с 1.5

3 голосов
/ 03 апреля 2012

Насколько я знаю, JVM обратно совместимы. Класс, скомпилированный с JDK 1, будет работать в последней версии JRE 7. Библиотеки определенно не на 100% совместимы. Некоторые методы устарели (и впоследствии удалены). Некоторые классы изменили поведение (обычно) неуловимым образом, что приведет к тому, что программы будут вести себя по-разному.

2 голосов
/ 03 апреля 2012

Вы всегда можете запустить с более новой версией JDK, чем та, которая использовалась для компиляции.Обратный путь невозможен (если вы не компилируете, используя параметр -target).

Возможно, вы захотите прочитать этот документ (в частности, Опции кросс-компиляции *Раздел 1007 *), в котором объясняется целевой параметр и поведение по умолчанию

1 голос
/ 10 апреля 2016

Вы можете посмотреть анализ обратной совместимости классов библиотеки Java (Jre) здесь: http://abi -laboratory.pro / java / tracker / timeline / jre /

отчет генерируется инструментом проверки соответствия японского языка .

enter image description here

0 голосов
/ 17 ноября 2015

Java обычно совместима с предыдущими выпусками, но в любом случае может возникнуть много проблем с миграцией.См. Мою статью о миграции с JDK 6 на 8 для деталей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...