Daftar format file kelas Java nomor versi utama?

174

Saya melihat daftar nomor versi utama untuk Java ini di pos lain:

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

Referensi:

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

Robert Mark Bram
sumber

Jawaban:

46

Ini berasal dari versi kelas. Jika Anda mencoba memuat sesuatu yang dikompilasi untuk java 6 di java 5 runtime Anda akan mendapatkan kesalahan, versi kelas yang tidak kompatibel, mendapat 50, diharapkan 49. Atau sesuatu seperti itu.

Lihat di sini di byte offset 7 untuk info lebih lanjut.

Info tambahan juga dapat ditemukan di sini .

Michael
sumber
Apakah ada cara untuk menggemakan nomor versi utama (versi kelas) langsung dari javac , tanpa menggunakan kelas yang ada seperti javap -verbose MyClass,?
samis
Tidak ada.
Stephen C
2

Jika Anda mengalami masalah tentang "kompiler kesalahan file kelas", Anda dapat menyelesaikannya dengan mengubah JRE proyek ke korespondennya melalui Eclipse.

  1. Bangun jalur
  2. Konfigurasikan jalur pembuatan
  3. Ubah pustaka ke koresponden tabel yang teman terakhir tunjukkan.
  4. Buat "file jar" dan kompilasi dan jalankan.

Saya melakukan itu dan itu berhasil.

Jefferson1919
sumber
0

Jika Anda memiliki file kelas di build/com/foo/Hello.class, Anda dapat memeriksa versi java apa yang dikompilasi menggunakan perintah:

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

Contoh penggunaan:

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

Menurut tabel di OP, versi utama 57 berarti file kelas dikompilasi ke level bytecode JDK 13

Andy Guibert
sumber