Список основных номеров версий формата файла класса Java?

174

Я видел этот список основных номеров версий для Java в другом посте:

  • Java 1.2 использует основную версию 46
  • Java 1.3 использует основную версию 47
  • Java 1.4 использует основную версию 48
  • Java 5 использует основную версию 49
  • Java 6 использует основную версию 50
  • Java 7 использует основную версию 51
  • Java 8 использует основную версию 52
  • Java 9 использует основную версию 53
  • Java 10 использует основную версию 54
  • Java 11 использует основную версию 55
  • Java 12 использует основную версию 56
  • Java 13 использует основную версию 57
  • Java 14 использует основную версию 58

Ссылки:

https://blogs.oracle.com/darcy/entry/source_target_class_file_version https://en.wikipedia.org/wiki/Java_class_file#General_layout

Роберт Марк Брэм
источник

Ответы:

46

Они приходят из версии класса. Если вы попытаетесь загрузить что-то скомпилированное для java 6 во время выполнения java 5, вы получите ошибку, несовместимую версию класса, полученную 50, ожидаемую 49. Или что-то в этом роде.

Смотрите здесь в байтовом смещении 7 для получения дополнительной информации.

Дополнительную информацию также можно найти здесь .

Майкл
источник
Есть ли способ вывести основной номер версии (версию класса) напрямую из javac , без использования существующего класса, например javap -verbose MyClass,?
Самис
Нет, нет
Стивен С.
18

Я нашел список версий файла классов Java на странице Википедии, который описывает формат файла класса:

http://en.wikipedia.org/wiki/Java_class_file#General_layout

Под байтовым смещением 6 и 7 перечислены версии, которым Java VM соответствует.

Питер
источник
2

Если у вас возникли проблемы с «компилятором ошибок файла класса», это можно решить, изменив JRE проекта на его корреспондента через Eclipse.

  1. Путь сборки
  2. Настроить путь сборки
  3. Измените библиотеку на корреспондента таблицы, которую друг показывает последним.
  4. Создайте «jar file», скомпилируйте и выполните.

Я сделал это, и это сработало.

Jefferson1919
источник
0

Если у вас есть файл класса по адресу build/com/foo/Hello.class, вы можете проверить, в какой версии Java он скомпилирован, используя команду:

javap -v build/com/foo/Hello.class | grep "major"

Пример использования:

$ javap -v build/classes/java/main/org/aguibert/liberty/Book.class | grep major
  major version: 57

Согласно таблице в OP, основная версия 57 означает, что файл класса был скомпилирован до уровня байт-кода JDK 13

Энди Гиберт
источник