Lista głównych numerów wersji formatu plików klas Java?


173

Widziałem tę listę głównych numerów wersji Java w innym poście:

  • Java 1.2 korzysta z wersji głównej 46
  • Java 1.3 korzysta z wersji głównej 47
  • Java 1.4 używa głównej wersji 48
  • Java 5 korzysta z wersji głównej 49
  • Java 6 używa głównej wersji 50
  • Java 7 korzysta z wersji głównej 51
  • Java 8 korzysta z wersji głównej 52
  • Java 9 korzysta z wersji głównej 53
  • Java 10 korzysta z wersji głównej 54
  • Java 11 korzysta z wersji głównej 55
  • Java 12 używa głównej wersji 56
  • Java 13 używa głównej wersji 57
  • Java 14 używa wersji głównej 58

Bibliografia:

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

Odpowiedzi:


45

Te pochodzą z wersji klasowej. Jeśli spróbujesz załadować coś skompilowanego dla java 6 w środowisku wykonawczym java 5, otrzymasz błąd, niezgodna wersja klasy, otrzymano 50, oczekiwano 49. Lub coś takiego.

Zobacz tutaj w przesunięciu bajtów 7, aby uzyskać więcej informacji.

Dodatkowe informacje można również znaleźć tutaj .


Czy istnieje sposób na powtórzenie głównego numeru wersji (wersji klasy) bezpośrednio z javaca , bez używania istniejącej klasy, takiej jak javap -verbose MyClass,?
samis

Nie, nie ma.
Stephen C


2

Jeśli masz jakiś problem z „błędnym kompilatorem pliku klasy”, możesz go rozwiązać, zmieniając środowisko JRE projektu na odpowiadające mu za pomocą Eclipse.

  1. Zbuduj ścieżkę
  2. Skonfiguruj ścieżkę kompilacji
  3. Zmień bibliotekę na odpowiadającą tabeli, którą znajomy pokazuje ostatnio.
  4. Utwórz „plik jar”, ​​skompiluj i wykonaj.

Zrobiłem to i zadziałało.


0

Jeśli masz plik klasy pod adresem build/com/foo/Hello.class, możesz sprawdzić, w jakiej wersji java jest kompilowany za pomocą polecenia:

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

Przykładowe użycie:

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

Zgodnie z tabelą w OP, wersja główna 57 oznacza, że ​​plik klasy został skompilowany do poziomu kodu bajtowego JDK 13

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.