Lista de números de versão principais do formato de arquivo da classe Java?


174

Eu vi essa lista dos principais números de versão do Java em outro post:

  • Java 1.2 usa a versão principal 46
  • Java 1.3 usa a versão principal 47
  • Java 1.4 usa a versão principal 48
  • Java 5 usa a versão principal 49
  • Java 6 usa a versão principal 50
  • Java 7 usa a versão principal 51
  • Java 8 usa a versão principal 52
  • Java 9 usa a versão principal 53
  • Java 10 usa a versão principal 54
  • Java 11 usa a versão principal 55
  • Java 12 usa a versão principal 56
  • Java 13 usa a versão principal 57
  • Java 14 usa a versão principal 58

Referências:

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

Respostas:


46

Estes vêm da versão da classe. Se você tentar carregar algo compilado para java 6 em um tempo de execução java 5, obterá o erro, versão de classe incompatível, 50, 49, esperado 49. Ou algo assim.

Veja aqui no byte offset 7 para mais informações.

Informações adicionais também podem ser encontradas aqui .


Existe uma maneira de ecoar o número da versão principal (versão da classe) diretamente do javac , sem usar uma classe existente como javap -verbose MyClass?
samis 18/06/19

Não, não existe.
Stephen C


2

Se você está tendo algum problema com o "compilador de erros do arquivo de classe", é possível resolver isso alterando o JRE do projeto para seu correspondente através do Eclipse.

  1. Caminho de construção
  2. Configurar caminho de construção
  3. Mude a biblioteca para o correspondente da tabela que o amigo mostra por último.
  4. Crie "arquivo jar" e compile e execute.

Eu fiz isso e funcionou.


0

Se você tiver um arquivo de classe em build/com/foo/Hello.class, poderá verificar em qual versão java ele é compilado usando o comando:

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

Exemplo de uso:

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

De acordo com a tabela no OP, a versão principal 57 significa que o arquivo de classe foi compilado no nível de bytecode do JDK 13

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.