Liste der Hauptversionsnummern des Java-Klassendateiformats?

172

Ich habe diese Liste der wichtigsten Versionsnummern für Java in einem anderen Beitrag gesehen:

  • Java 1.2 verwendet die Hauptversion 46
  • Java 1.3 verwendet die Hauptversion 47
  • Java 1.4 verwendet die Hauptversion 48
  • Java 5 verwendet die Hauptversion 49
  • Java 6 verwendet die Hauptversion 50
  • Java 7 verwendet die Hauptversion 51
  • Java 8 verwendet die Hauptversion 52
  • Java 9 verwendet die Hauptversion 53
  • Java 10 verwendet die Hauptversion 54
  • Java 11 verwendet die Hauptversion 55
  • Java 12 verwendet die Hauptversion 56
  • Java 13 verwendet die Hauptversion 57
  • Java 14 verwendet die Hauptversion 58

Verweise:

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

Robert Mark Bram
quelle

Antworten:

45

Diese stammen aus der Klassenversion. Wenn Sie versuchen, etwas zu laden, das für Java 6 in einer Java 5-Laufzeit kompiliert wurde, erhalten Sie den Fehler, inkompatible Klassenversion, 50, erwartete 49. Oder so ähnlich.

Weitere Informationen finden Sie hier in Byte-Offset 7.

Weitere Informationen finden Sie auch hier .

Michael
quelle
Gibt es eine Möglichkeit, die Hauptversionsnummer (Klassenversion) direkt von javac aus wiederzugeben , ohne eine vorhandene Klasse wie zu verwenden javap -verbose MyClass?
Samis
Nein, gibt es nicht.
Stephen C
18

Ich habe auf der Wikipedia-Seite eine Liste mit Java-Klassendateiversionen gefunden, die das Klassendateiformat beschreibt:

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

Unter Byte-Offset 6 und 7 werden die Versionen aufgelistet, mit welcher Java-VM sie übereinstimmen.

Peter
quelle
2

Wenn Sie ein Problem mit dem "Fehler-Compiler der Klassendatei" haben, können Sie dieses Problem beheben, indem Sie die JRE des Projekts über Eclipse in die entsprechende JRE ändern.

  1. Pfad erstellen
  2. Konfigurationspfad konfigurieren
  3. Ändern Sie die Bibliothek in den Korrespondenten der Tabelle, die der Freund zuletzt anzeigt.
  4. Erstellen Sie eine "JAR-Datei" und kompilieren Sie sie und führen Sie sie aus.

Ich habe das gemacht und es hat funktioniert.

Jefferson1919
quelle
0

Wenn Sie eine Klassendatei unter haben build/com/foo/Hello.class, können Sie mit dem folgenden Befehl überprüfen, in welcher Java-Version sie kompiliert wurde:

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

Anwendungsbeispiel:

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

Gemäß der Tabelle im OP bedeutet Hauptversion 57, dass die Klassendatei auf JDK 13-Bytecode-Ebene kompiliert wurde

Andy Guibert
quelle